2015-05-21 23 views
0
$inputFilter->add(array(
    'name'  => 'seatingCapacity', 
    'required' => TRUE, 
    'filters' => array(
     array('name' => 'Int'), 
    ), 
)); 

在我的學說實體中,我有一個getInputFilter方法,我用於表單驗證。以上是其中一個輸入元素的代碼片段。我的問題是required => true即使提交空白表單也無法正常工作。zf2學說形式int要求不工作

經過研究,我發現,Int過濾器將空輸入轉換爲0並提交它,這就是爲什麼required驗證程序不起作用。我只是需要爲什麼它可能不工作的原因。

僅供參考,我搜索

Zend Framework 2 - Integer Form Validation

,他建議使用Between驗證

$inputFilter->add($factory->createInput(array(
     'name'  => 'zip', 
     'required' => true, 
     'filters' => array(
      array('name' => 'Int'), 
     ), 
     'validators' => array(
      array(
       'name' => 'Between', 
       'options' => array(
        'min' => 1, 
        'max' => 1000, 
       ) 
      ) 
     ) 
    ) 
)); 

我想知道我爲什麼要使用Between爲什麼required失敗。

+0

感覺就像你回答了你自己的問題。 「...這就是爲什麼」必需「驗證程序不工作」 – srayner

+0

我還沒有測試過這個東西(所以它不是一個評論而不是一個答案),但是你不能使用[to null(的組合) ](http://framework.zend.com/manual/current/en/modules/zend.filter.set.html#tonull)過濾器,[是int](http://framework.zend.com/manual/current /en/modules/zend.i18n.validator.int.html)驗證程序和[not empty](http://framework.zend.com/manual/current/en/modules/zend.validator.not-empty.html)驗證器? –

回答

0

您應該只使用Between驗證程序來驗證給定值是否在minmax之間的值。它與解決您的空值到0問題無關。

你應該問自己兩個問題:

  • 0一個有效的價值?
  • 我想自動將null空字符串('')和其他空值賦值給0嗎?

如果你真的想阻止該Int器集的空值0,也許你不應該使用這個過濾器在所有的呢?

您可以改爲添加an IsInt validator來檢查給定值是否爲整數。您的required => true設置將按預期工作,驗證將在任何其他(不是整數)輸入上失敗,因此也對空,空字符串等進行驗證。

+0

謝謝你Wilt。真的很感謝你的努力。其實我沒有得到'Value required'錯誤信息,而我應該一直擔心數字是否輸入。在這段時間裏,我發現0應該是有效的值。因此,如果輸入爲空,但不應包含數字以外的任何內容。我解釋了我的要求。 – netmantle

0

謝謝你的時間,能源&努力。 其實我解決了這個問題。

我複製粘貼的代碼,我應該小心這樣做。

我發現了什麼是有一個名爲「詮釋」沒有這樣的過濾器,實際上它的「數字」

$inputFilter->add(array(
'name'  => 'seatingCapacity', 
'required' => TRUE, 
'filters' => array(
    array('name' => 'Int'), 
), 

));

顯示我的錯誤,因爲過濾器名稱應該是'數字'。 只有這樣才能解決我的問題,並按我的要求工作。

$inputFilter->add(array(
'name'  => 'seatingCapacity', 
'required' => TRUE, 
'filters' => array(
    array('name' => 'Digits'), 
), 

));

這是正確的做法,我建議你在引用源代碼時要小心,因爲這是我做的一個不合邏輯的錯誤。

快樂編碼