如何使用Zend Framework 2验证多选项选择?

5
我将尝试使用输入过滤器验证多选内容,但每次都会出现错误。错误信息是“notInArray”:“输入内容未在列表中找到”。(我使用了ajax,但这不重要)。为了更清楚,我将展示部分代码。
在控制器中:
if ($request->isPost()) {
            $post = $request->getPost();
            $form = new \Settings\Form\AddUserForm($roles);// 
            $form->get('positions')
                         ->setOptions(
                                 array('value_options'=> $post['positions']));

//.... 更多的代码...

当我输入 print_r($post['positions']); 时,我看到: array(0 => 118, 1 => 119)

在 ..../form/UserForm.php 中,我创建了一个乘法元素。

$this->add(array(
                'type' => 'Zend\Form\Element\Select',
                'attributes' => array(
                    'multiple' => 'multiple',
                    'id' => 'choosed_positions',
                ),
                'required' => false,
                'name' => 'positions',



        ));

在验证文件中,代码如下:

$inputFilter->add($factory->createInput(array(
                        'name' => 'positions',
                        'required' => false,
                        'validators' => array(
                            array(
                                'name' => 'InArray',
                                 'options' => array(
                                    'haystack' => array(118,119),
                                    'messages' => array(
                                        'notInArray' => 'Please select your position !'
                                    ),
                                ),
                            ),
                        ),

每次看到这个错误的原因是什么,我该如何解决?


无论您选择多少选项(零、一个或两个),它是否都失败了? - dualmon
此外,如果您不将其设置为多个,它是否会失败? - dualmon
如果您使用var_dump($form->get('positions')->getValueOptions()),您会得到什么? - dualmon
当我选择零个选项时,我看不到错误。当我选择一个或多个选项时,我会看到错误。当我放置 var_dump 时,我会看到这个: array (2) { [0] => string(3) "118" [1] => string(3) "119" } 你有什么想法,这可能是什么问题? - Anton_Sh
干得好!感谢您更新问题并提供解决方案。 - dualmon
显示剩余2条评论
1个回答

3
默认情况下,Zend Framework 2中的选择器使用了"在数组内"验证器。如果您要添加一个新的选择器,将会有两个验证器。您需要按照以下方式禁用默认验证器:
$this->add(array(
    'type' => 'Zend\Form\Element\Select',
    'options' => array(
        'disable_inarray_validator' => true, // <-- disable
    ),
    'attributes' => array(
        'multiple' => 'multiple',
        'id' => 'choosed_positions',
    ),
    'required' => false,
    'name' => 'positions',
));

同时,您应该消除额外的错误信息。 如果这可以帮到您,请告诉我们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接