我收到一个名为 product 的对象,里面有一个名为 tags 的数组。
在我的产品型号上,标签如下所示:
/**
* @var array
*/
public $tags = array();
我的inputFilter设置为:
$this->get('tags')->setAllowEmpty(true)->setContinueIfEmpty(true)->setRequired(false);
$this->get('tags')->getValidatorChain()->attach(
new Type('array')
);
每次我在tags数组中收到带有数据的对象时,一切都会好的,但是只要我得到一个空标签数组,我就得到了:
array(1) {
["tags"] => array(1) {
["isEmpty"] => string(36) "Value is required and can't be empty"
}
}
======================================================================
The application has thrown an exception!
======================================================================
我认为我的过滤器设置正常,但是当我尝试保存该对象时仍然会出现异常,因为过滤器要求提供数据。
编辑:这是我认为实际错误的链接:https://github.com/zendframework/zf2/issues/2527
答案 0 :(得分:0)
问题可能是你的'标签'输入是\ Zend \ InputFilter \ Input对象而不是\ Zend \ InputFilter \ ArrayInput。此类确保提供给过滤器的数据是一个数组,因此您不需要验证器。
以下代码在ZF 2.2.5中返回true:
$filter = new \Zend\InputFilter\InputFilter();
$filter->add(new \Zend\InputFilter\ArrayInput('tags'));
$filter->get('tags')->setAllowEmpty(true)->setContinueIfEmpty(true)->setRequired(false);
$filter->setData(['tags' => []]);
$filter->isValid(); // returns true