Zend framework2 Zend Framework 2 MultiCheckbox和validatiors

Zend framework2 Zend Framework 2 MultiCheckbox和validatiors,zend-framework2,zend-form,zend-validate,Zend Framework2,Zend Form,Zend Validate,是否有方法使用Zend验证器(如Zend\Validator\Digits)验证Zend\Form\Element\MultiCheckbox的实例 我发现现有的Zend验证器没有考虑到所选值是数组这一事实 我在这里找到了一个引用(),可以使用FormMultiCheckboxhelper()向元素添加inaray验证器,但我不确定这对其他类型的验证器有何帮助。我的用法表明它不是 我意识到我可以扩展Zend验证器来考虑阵列,但我觉得必须有一种方法来实现这一点,它可以与其他的ZF2开箱即用。如果没

是否有方法使用Zend验证器(如
Zend\Validator\Digits
)验证
Zend\Form\Element\MultiCheckbox
的实例

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

我在这里找到了一个引用(),可以使用
FormMultiCheckbox
helper()向元素添加
inaray
验证器,但我不确定这对其他类型的验证器有何帮助。我的用法表明它不是

我意识到我可以扩展Zend验证器来考虑阵列,但我觉得必须有一种方法来实现这一点,它可以与其他的ZF2开箱即用。如果没有办法,那么我将扩展验证器,但我更愿意尽可能使用现成的验证器

使用:
zendframework/zend表单:2.10.2

zendframework/zend validator:2.10.1

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

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);
此元素将始终返回字符串数组(“0”、“1”和/或“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);
此元素将始终返回一个整数数组(0、1和/或2),您无需验证以确认所选值是否为整数

更新


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

您试图验证什么?每个Zend验证器(以及您自己创建的任何验证器)都会根据特定标准评估用户输入。您是否正在尝试验证是否选中了框。。。是否选中了多个框。。。是否选中了特定数量的框。。。选中的框是否为特定集合的成员。。。选中的框是否具有特定关系?@jcropp我要验证选中的值。我特别想确认它们都是数字。我不在乎检查了多少选项;它可以是零,也可以是全部。此外,还有很多例子说明了如何做到这一点。谢谢@jcrop。是的,我知道这些值是根据代码预先填充的。但是,没有什么可以阻止用户在提交之前检查元素并更改这些值。如果我不验证所选的值,那么我的代码就会受到攻击。我可能不需要验证就可以继续,但我不想冒险。对于用户不试图更改multicheckbox代码中的值的情况,您不需要验证,因为您将它们编码为整数。如果您担心用户试图更改您在multicheckbox代码中编码的值,那么InArray验证器似乎确实适合您:它不会直接验证输入是否为数字;但是,它通过确认输入是一个仅由数字组成的数组的成员来间接验证输入是否为数字,您已指定该数组与multicheckbox数字值相匹配。好的,谢谢。看起来唯一的选项是使用inArray验证器根据白名单值进行验证,或者扩展ZF软件包附带的验证器。如果您更新您的答案以反映这一点,我将继续并将其标记为已接受。