Zend_Form - Как добавить Validator после отправки формы

У меня в форме 2 текстовых поля.

  1. TextFieldA - не требуется
  2. TextFieldB - не требуется

После того, как пользователь отправил форму, как добавить валидатор / setRequired (true) в TextFieldB, если значение TextFielA не пусто?


person haohan    schedule 30.04.2011    source источник


Ответы (2)


Я вижу два подхода в дополнение к идее @Marcin.

  1. Условно вызовите setRequired() для соответствующих элементов, создав метод preValidate() в форме и вызвав его в своем контроллере. [На самом деле та же идея, что и @Marcin, но вдавлена ​​в саму форму, что делает контроллер немного более компактным.]

  2. Создайте настраиваемый валидатор, называемый чем-то вроде ConditionallyRequired, который принимает в качестве опции имя поля «другого поля». Затем прикрепите этот валидатор к каждому элементу, задав ему имя «другого» элемента. Затем в методе isValid($value, $context) валидатора условно проверьте $value, если $context['otherfield'] не пусто.

person David Weinraub    schedule 30.04.2011

Вы могли сделать следующее:

if ($this->getRequest()->isPost()) {

    $textFieldA = $yourForm->getElement('TextFieldA');
    $textFieldB = $yourForm->getElement('TextFieldB');

    if (!empty($_POST['TextFieldA'])) {
        $textFieldB->setRequired(true);
    }

    if (!empty($_POST['TextFieldB'])) {
        $textFieldA->setRequired(true);
    }            

    if ($mainForm->isValid($_POST)) {                
        // process the form              
    }
}

По сути, вы добавляете валидаторы после публикации, но до проверки формы. Надеюсь это поможет.

person Marcin    schedule 30.04.2011