inputFilter不使用空数组(ZF2)

时间:2014-02-08 15:37:32

标签: php zend-framework2

我收到一个名为 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

1 个答案:

答案 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