2012-08-14 16 views
3

我的目標是驗證在URL中傳遞的參數,所以我創建了一個具有驗證清單的運行,像這樣一個validate方法:Zend框架InArray校驗數組的語法

$validators = array(
     'number' => array(
      'digits', 
      'presence' => 'required', 
      'messages' => array(
       "%value%' is not a valid number.", 
      ), 
     ), 
     'country' => array(
      'presence' => 'required', 
      'InArray' => array('haystack' => array('USA', 'CAN', 'AUS', 'JPN')), 
      'messages' => array(
       "'%value%' is not a valid country code.", 
      ), 
     ), 
     // etc. 
); 

$valid = new Zend_Filter_Input(array(), $validators, $data); 
return $valid->isValid() 

的問題是, 'InArray'驗證器不做任何事情。它不會產生任何錯誤,它只是不起作用。我認爲我得到的語法錯誤。

「InArray」驗證程序的正確語法是什麼?

+0

你將這些驗證器傳遞給了什麼? 'haystack'應該是它自己的索引,比如'messages',而不是'InArray'鍵上的數組元素。 – drew010 2012-08-14 19:23:40

+0

爲了清楚起見,我更新了問題。你是說'InArray'會被聲明爲'數字','haystack'是一個單獨的索引嗎? [好的,那是行不通的。它導致Zend_Validate_InArray失蹤參數] – Ian 2012-08-14 20:21:14

+0

看到我的答案,我想你可能一直在嘗試將數組傳遞給Zend_Form,它可以接受haystack參數,儘管不是上面提供的格式。 – drew010 2012-08-14 20:31:43

回答

3

傳遞額外的規則和屬性,以驗證器與Zend_Filter_Input使用,創建該對象的具體實例,將它設置爲驗證這樣的:

$validators = array(
      'number' => array(
        'digits', 
        'presence' => 'required', 
        'messages' => array(
          "%value%' is not a valid number.", 
        ), 
      ), 
      'country' => array(
        new Zend_Validate_InArray(
         array('haystack' => array('USA', 'CAN', 'AUS', 'JPN')) 
        ), 
        'presence' => 'required', 
        'messages' => array(
          "'%value%' is not a valid country code.", 
        ), 
      ), 
      // etc. 
    ); 

你必須做這樣的原因是因爲在使用InArray驗證程序時沒有用於設置乾草堆的過濾器metacommands。有一些基本的metacommands適用於許多驗證器,但乾草堆不是其中之一。

要指定haystack,請直接使用require選項創建一個新的Zend_Validate_InArray對象,並將該驗證程序傳遞給給Zend_Filter_Input的驗證程序數組。

+0

竅門。謝謝。 – Ian 2012-08-14 20:52:10