Пользовательский валидатор Zend

Я хочу создать собственный валидатор в Zend.

например, для мой код:

$txt_state = new Zend_Form_Element_Text('state');
$txt_state->setLabel('State');

$txt_prop = new Zend_Form_Element_Text('pin');
$txt_prop->setLabel('Property');

Теперь я хочу, чтобы форма отправлялась только в том случае, если хотя бы один из этих двух элементов не пуст.


person Aditya Vijay    schedule 09.11.2012    source источник


Ответы (2)


вы можете сделать это грязным способом:

if ($this->getRequest()->isPost()) {
    if (is_empty($form->getElement('state')->getValue())) {
        $form->getElement('pin')->setRequired();
    }
    if (is_empty($form->getElement('pin')->getValue())) {
        $form->getElement('state')->setRequired();
    }

   if ($form->isValid()) {
     //redirect to success page 
   } else {
    //do nothing, display errors messages, refill form 
   }
}

или очиститель с расширенным Zend_Form_Element.

person konradwww    schedule 09.11.2012
comment
Что это? Мне нужно поведение Zend по умолчанию, т.е. если проверка не удалась, элемент управления снова вернется к странице формы с сообщением об ошибке. - person Aditya Vijay; 09.11.2012
comment
Затем дополнительно добавьте этот код: if ($ form- ›isValid ()) {// перенаправить на страницу успеха} else {// ничего не делать, отображать сообщения об ошибках, заполнять форму} - person konradwww; 09.11.2012

Здесь вы можете добавить такую ​​настраиваемую проверку в контроллер.

$state = "YOUR VALUE";

$form->state->setValue($state);
$form->getElement('state')->setRequired();
$form->getElement('state')->addValidator( 'Alpha', true, array( 'messages' => array( 'notAlpha' => "Please enter alphabetic character only in state name.
") ));

$mArr = array('state'=>$state);

if( !$form->isValid($mArr) ){

    $myErrorArray[] = $form->getMessages();

    $is_error = 1;
}

Здесь $ myErrorArray содержат все сообщения об ошибках, которые вы применяете к состоянию элемента.

person Nilesh Gupta    schedule 13.02.2013