Zend_Form - Как добавить Validator после отправки формы - PullRequest
3 голосов
/ 30 апреля 2011

В моей форме есть 2 текстовых поля.

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

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

Ответы [ 2 ]

2 голосов
/ 30 апреля 2011

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

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

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

1 голос
/ 30 апреля 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              
    }
}

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

...