Zend framework2 仅当不为空时,所需的ZF2输入验证器不为空

Zend framework2 仅当不为空时,所需的ZF2输入验证器不为空,zend-framework2,Zend Framework2,我正在构建一个带有输入过滤器的表单,所有这些都在Zend Framework 2中。我使用数组来配置输入、过滤器和验证器。那么,假设我有一些意见: array( 'name' => 'foo', 'required' => true, ) 在页面上,有一些jQuery代码可以选择性地隐藏此输入。如果是,则隐藏并禁用输入。提交时,表单数据上的var_dump会给出foo=>null(可能是因为它实际上没有在post数据中提交,因此表单输入从未给出值)。如果输入未隐藏且

我正在构建一个带有输入过滤器的表单,所有这些都在Zend Framework 2中。我使用数组来配置输入、过滤器和验证器。那么,假设我有一些意见:

array(
    'name' => 'foo',
    'required' => true,
)
在页面上,有一些jQuery代码可以选择性地隐藏此输入。如果是,则隐藏并禁用输入。提交时,表单数据上的var_dump会给出
foo=>null
(可能是因为它实际上没有在post数据中提交,因此表单输入从未给出值)。如果输入未隐藏且未填写,则在提交时,它具有
foo=>字符串“”(长度=0)


如果使用输入,我想要求输入有一个值。那么,是否有一些设置可以添加到配置数组中,允许null通过验证,但拒绝空字符串值?或者我需要编写自定义验证器吗?

是的,您应该使用NotEmpty验证器

$inputFilter = new \Zend\InputFilter\InputFilter ();
$inputFilter->add ([
  'name' => 'foo',
  'validators' => [
    [
      'name' => 'not_empty',
      'options' => [
        'type' => 'string'
      ]
    ]
  ]
]);

$form->setInputFilter ($inputFilter);

为了其他读者,这里的关键是,如果您不指定自己的非空验证器,那么将创建一个更具限制性的默认验证器。我最终让我的用例开始工作。这里还有几个关键点是,我仍然需要指定所需的属性(否则它似乎假设它是必需的?)。此外,我还有一个StringLength验证器,当输入为null时,它会出现问题,所以我不得不放弃它。还没有研究是否可以使用空值使StringLength正常。