2013-07-23 53 views
2

我使用Zend \ InputFilter \ InputFilter類進行表單驗證。 point field只能接受1到5之間的整數。但它不能正常工作,它接受以1到5之間的整數開始的字符串。例如1kjhkjh,2tgfjhgfjhf,4jhkljg ... 我的代碼中出現了什麼問題?Zend框架驗證字段是1到5之間的整數

$inputFilter->add (
      $inputFilter->getFactory()->createInput (
       array (
        'name' => 'point', 
        'required' => true, 
        'validators' => array ( 
         array(
          'name' => 'Digits'),  
         array (
          'name' => 'Between', 
          'options' => array (
           'min' => 1, 
           'max' => 5, 
           'messages' => array('notBetween' => 'Point must be between %min% and %max%') 
          ) 
         ) 
        ) 
       ) 
      ) 
     ); 
+0

一種解決方法是添加1 – Tounu

+1

使用int過濾器的字符串長度。 – akond

回答

3

使用Zend的驗證程序的第二個參數,打破驗證鏈,並返回一個錯誤,breakChainOnFailuredocumentation)告訴元素停止驗證,如果被觸發這個錯誤,所以你的情況,如果它不是一個數字用戶會得到一個錯誤,當用戶已經修復了錯誤的第二驗證器就會被觸發過:

$inputFilter->add (
      $inputFilter->getFactory()->createInput (
       array (
        'name' => 'point', 
        'required' => true, 
        'validators' => array ( 
         array(
          'name' => 'Digits', 'breakChainOnFailure' => true),  
         array (
          'name' => 'Between', 
          'options' => array (
           'min' => 1, 
           'max' => 5, 
           'messages' => array('notBetween' => 'Point must be between %min% and %max%') 
          ) 
         ) 
        ) 
       ) 
      ) 
     ); 

另一種選擇是取決於你喜歡什麼樣的錯誤信息給更換Zend_Validate_Digits與​​(docmentation)如果他進入用戶的話這是非有效的數據。當然,正如評論中所建議的那樣,如果您想要通過自己修復任何非有效數據來處理任何非有效數據,並且不會向用戶反饋他做錯了什麼,也可以使用Zend_Filter_Int

0
'breakChainOnFailure': true 

應該

'breakChainOnFailure'=> true