Zend Framework 2 MultiCheckbox和validatiors

时间:2018-04-20 19:36:31

标签: zend-framework2 zend-form zend-validate

有没有办法使用Zend验证器验证Zend\Validator\Digits的实例,例如FormMultiCheckbox

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

我在这里找到了一个引用(@code_warntype),InArray帮助器(http://zf2.readthedocs.io/en/release-2.2.7/modules/zend.form.element.multicheckbox.html)可用于向元素添加console.log验证器,但我是不确定这对其他类型的验证器有何帮助。我的用法表明它没有。

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

是:
zendframework / zend-form:2.10.2
zendframework / zend-validator:2.10.1

1 个答案:

答案 0 :(得分:0)

Multicheckbox表单元素只返回您自己定义的值,因此只要您正确配置它们,就不需要验证这些值。 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);

此元素将始终返回一个字符串数组(' 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),并且您无需验证以确认所选值是整数。

<强>更新

为了增加安全性(如果用户可能会尝试更改您在多个检查程序代码中编码的值的威胁),可以使用InArray验证程序通过确认它们是间接来间接验证输入是否为数字白名单数字数组的成员,这些值与您在multiheckbox数字值中包含的值相同。