Сообщения проверки ввода Zend Framework

У меня есть следующий код

$validators = array(
        'name'  => array('NotEmpty',
                        'messages' => 'A valid name is required'
        ),

        'email'=> array(
            new Zend_Validate_Regex("^[a-z0-9]+[a-z0-9_-]*(\.[a-z0-9_-]+)*@[a-z0-9_-]+(\.[a-z0-9_-]+) *\.([a-z]+){2,}$^"),
            'messages' => array('A valid email is required',
                Zend_Validate_Regex::NOT_MATCH=>'The email is not valid',)
        ))

и когда я проверяю, действительно ли это действительно, и имя и адрес электронной почты пусты, я получаю для обоих «Требуется действительное имя»

результат выглядит так

Array
(
    [name] => Array
        (
            [isEmpty] => A valid name is required
        )

    [email] => Array
        (
            [isEmpty] => A valid name is required
        )

)

Итак, мой вопрос: как сделать, чтобы для каждого нужное сообщение было получено в случае, если оба пусты? Мне также нужно, чтобы проверка электронной почты работала и отображала правильное сообщение. Заранее спасибо.


person Centurion    schedule 03.04.2011    source источник


Ответы (1)


Для правильной проверки электронной почты вы можете использовать встроенный валидатор электронной почты. . Итак, когда вы создаете элементы формы, вы можете указать валидатор:

$email = new Zend_Form_Element_Text('email');
$email->setDecorators($this->elementDecorators)
      ->setLabel('Email')
      ->setRequired(true)
      ->addValidator('EmailAddress')
      ->setFilters(array('StringTrim','StringToLower'));

Вы также можете указать сообщения об ошибках:

$email->setErrorMessages(array(
      'err1' => 'Error1',
      'err2' => 'Error2'
));  

Затем Zend_Form будет отображать для вас правильные сообщения об ошибках.

person Upvote    schedule 03.04.2011
comment
Проблема в том, что я не использую Zend_Form, мне просто нужна простая проверка формы, спасибо. - person Centurion; 03.04.2011
comment
Почему нет? Zend_Form упрощает работу с формами. Однако в вашем коде вы, кажется, настраиваете только один валидатор, а вам нужно два. Попробуйте их разделить. Вы можете попробовать статический валидатор Zend_Validate::is($email, 'EmailAddress') - person Upvote; 04.04.2011