以下工作为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