ZF2: приоритет для валидаторов в 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(
                ),
            ),
        ),
    ));

На моем входе есть в основном 3 валидатора. NotEmpty, StringLength и EmailAdress.

Есть ли способ установить приоритет между ними? Прямо сейчас, если я отправляю пустую форму, я получаю сообщения относительно этих трех валидаторов, т.е. :

  • Мой ввод пуст.
  • Длина моей строки слишком короткая (спасибо...)
  • Мой ввод не является электронным письмом (еще раз спасибо...)

Можно ли как-то сказать моему валидатору остановиться при первом сбое? (или, по крайней мере, только для печати 1-го сообщения).


person Tounu    schedule 30.05.2013    source источник


Ответы (1)


Используйте ключ '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(
            ),
        ),
    ),
));
person Crisp    schedule 30.05.2013
comment
Идеально ! Именно то, что я искал! Спасибо ;) - person Tounu; 30.05.2013