ZF2:InputFilter中验证器的优先级

Tou*_*unu 2 php zend-framework2 zend-inputfilter

我在这样的表单条目上有一个验证器:

    $this->add(array(
        'name' => 'email',
        'required' => true,
        'filter' => array(
            'name' => 'StripTags',
        ),
        'validators' => array(
            array(
                'name' => 'NotEmpty',
                'options' => array(
                    'messages' => array(
                        \Zend\Validator\NotEmpty::IS_EMPTY => 'Veuillez renseigner une adresse e-mail.',
                    ),
                ),
            ),                
            array(
                'name' => 'StringLength',
                'options' => array(
                    'encoding' => 'UTF-8',
                    'min' => 1,
                    'max' => 100,
                ),
            ),
            array(
                'name' => 'EmailAddress',
                'options' => array(
                ),
            ),
        ),
    ));
Run Code Online (Sandbox Code Playgroud)

在我的输入上有基本的3个验证器.的NotEmpty,和StringLength,和EmailAdress.

有没有办法在它们之间设置一种优先级?现在,如果我提交一个空表格,我会得到相对于这3个验证器的消息,即.:

  • 我的输入是空的.
  • 我的字符串长度太短(谢谢...)
  • 我的输入不是电子邮件(再次感谢...)

无论如何要告诉我的验证员在第一次失败时停止?(或者至少只打印第一条消息).

Cri*_*isp 5

使用'break_chain_on_failure'验证器规范中的键值为true,即

$this->add(array(
    'name' => 'email',
    'required' => true,
    'filter' => array(
        'name' => 'StripTags',
    ),
    'validators' => array(
        array(
            'name' => 'NotEmpty',
            'break_chain_on_failure' => true,
            'options' => array(
                'messages' => array(
                    \Zend\Validator\NotEmpty::IS_EMPTY => 'Veuillez renseigner une adresse e-mail.',
                ),
            ),
        ),                
        array(
            'name' => 'StringLength',
            'break_chain_on_failure' => true, 
            'options' => array(
                'encoding' => 'UTF-8',
                'min' => 1,
                'max' => 100,
            ),
        ),
        array(
            'name' => 'EmailAddress',
            'options' => array(
            ),
        ),
    ),
));
Run Code Online (Sandbox Code Playgroud)