以下工作爲2.1.1版本ZF2:
的問題(如果我沒有得到它)是在例如,對於'fieldName'
的空值,不會觸發驗證。這可能是很煩人的,雖然在
$input = new \Zend\InputFilter\Input('fieldName');
$input
->setAllowEmpty(true)
->setRequired(false)
->getValidatorChain()
->attach(new \Zend\Validator\Callback(function ($value) {
echo 'called validator!';
return true; // valid
}));
$inputFilter = new \Zend\InputFilter\InputFilter();
$inputFilter->add($input);
$inputFilter->setData(array('fieldName' => 'value'));
var_dump($inputFilter->isValid()); // true, echoes 'called validator!'
$inputFilter->setData(array('fieldName' => ''));
var_dump($inputFilter->isValid()); // true, no output
$inputFilter->setData(array());
var_dump($inputFilter->isValid()); // true, no output
這是當你有特殊的情況下,很煩人如檢查分配給您的CMS一個頁面的URL和避免碰撞(空URL仍然是一個URL!) 。
有一種處理空字符串的方法,它基本上將NotEmpty
驗證程序附加在自己的上面,並避免調用setRequired
和setAllowEmpty
。這將基本上告訴Zend\InputFilter\Input#injectNotEmptyValidator
不utomatically附上了自己的一個NotEmpty
驗證:
$input = new \Zend\InputFilter\Input('fieldName');
$input
->getValidatorChain()
->attach(new \Zend\Validator\NotEmpty(\Zend\Validator\NotEmpty::NULL))
->attach(new \Zend\Validator\Callback(function ($value) {
echo 'called validator!';
return true; // valid
}));
$inputFilter = new \Zend\InputFilter\InputFilter();
$inputFilter->add($input);
$inputFilter->setData(array('fieldName' => 'value'));
var_dump($inputFilter->isValid()); // true, echoes 'called validator!'
$inputFilter->setData(array('fieldName' => ''));
var_dump($inputFilter->isValid()); // true, echoes 'called validator!'
$inputFilter->setData(array());
var_dump($inputFilter->isValid()); // false (null was passed to the validator)
如果你也想覈對null
,則需要延長Zend\InputFilter\Input
如下:
class MyInput extends \Zend\InputFilter\Input
{
// disabling auto-injection of the `NotEmpty` validator
protected function injectNotEmptyValidator() {}
}
http://akrabat.com/zend-framework-2/setting-up-required-fields-that-can-be-empty-with-zendinputfilter/ – Sam 2013-02-16 13:58:36
這不是我需要的,因爲如果allow_empty = true,我的元素值爲空,zf2認爲該元素是有效的,不會調用驗證器。 – deyine 2013-02-16 14:29:03
我想我不明白你的問題。要麼你允許空值,要麼你不允許。如果你不允許空值,那麼所有的驗證器都會運行,否則驗證會失敗,當一個空的輸入被給出時。如果你確實允許,那麼一個空值就不需要進一步確認了o0 – Sam 2013-02-16 15:29:43