ZF2 输入验证器只在不为空时才为必需的不为空

ZF2 input validator for required not empty only when not null

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

array(
    'name' => 'foo',
    'required' => true,
)

在页面上,有一些 jQuery 代码可以选择性地隐藏此输入。如果是,它会隐藏并禁用输入。提交时,表单数据上的 var_dump 给出 foo => null(可能是因为它实际上并未在 post 数据中提交,因此表单输入永远不会被赋予值)。如果输入未隐藏且未填写,则在提交时它有 foo => string '' (length=0).

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

是的,你应该使用 NotEmpty 验证器。

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

$form->setInputFilter ($inputFilter);