Персонализиран Zend Validator

Искам да създам персонализиран валидатор в 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');

Сега искам формулярът да бъде изпратен само ако поне един от тези 2 елемента не е празен.


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