Zend Framework 2 MultiCheckbox 和验证器

Zend Framework 2 MultiCheckbox and validatiors

有没有一种方法可以使用 Zend\Validator\Digits 等 Zend 验证器来验证 Zend\Form\Element\MultiCheckbox 的实例?

我发现现有的 Zend 验证器没有考虑到所选值是一个数组这一事实。

我在此处找到了一个参考 (http://zf2.readthedocs.io/en/release-2.2.7/modules/zend.form.element.multicheckbox.html) that the FormMultiCheckbox helper (https://framework.zend.com/manual/2.4/en/modules/zend.form.view.helper.form-multicheckbox.html) 可用于向元素添加 InArray 验证器,但我不确定这对其他类型的验证器有何帮助。我的用法表明它没有。

我知道我可以扩展 Zend Validators 来解释数组,但我觉得必须有一种方法可以做到这一点,它可以与 ZF2 的其余部分开箱即用。如果没有办法,那么我将扩展验证器,但我宁愿尽可能使用开箱即用的验证器。

使用:
zendframework/zend-form: 2.10.2
zendframework/zend-validator: 2.10.1

Multicheckbox 表单元素只会 return 您自己定义的值,因此只要正确配置就无需验证这些值。 ZF3 Documentation 给出了以下示例:

use Zend\Form\Element;
use Zend\Form\Form;

$multiCheckbox = new Element\MultiCheckbox('multi-checkbox');
$multiCheckbox->setLabel('What do you like ?');
$multiCheckbox->setValueOptions([
        '0' => 'Apple',
        '1' => 'Orange',
        '2' => 'Lemon'
]);

$form = new Form('my-form');
$form->add($multiCheckbox);

此元素将始终 return 一个字符串数组('0'、'1'、and/or '2')。元素也可以这样写:

use Zend\Form\Element;
use Zend\Form\Form;

$multiCheckbox = new Element\MultiCheckbox('multi-checkbox');
$multiCheckbox->setLabel('What do you like ?');
$multiCheckbox->setValueOptions([
        0 => 'Apple',
        1 => 'Orange',
        2 => 'Lemon'
]);

$form = new Form('my-form');
$form->add($multiCheckbox);

此元素将始终 return 一个整数数组(0、1、and/or 2),您无需验证以确认所选值是整数。

更新

为了增加安全性(以防用户可能会尝试更改您在多选框代码中编码的值的威胁),InArray 验证器可用于通过确认输入是成员来间接验证输入是否为数字一组仅包含白名单数字的值,这些值与您包含在多复选框数字值中的值相同。