У меня в форме 2 текстовых поля.
- TextFieldA - не требуется
- TextFieldB - не требуется
После того, как пользователь отправил форму, как добавить валидатор / setRequired (true) в TextFieldB, если значение TextFielA не пусто?
У меня в форме 2 текстовых поля.
После того, как пользователь отправил форму, как добавить валидатор / setRequired (true) в TextFieldB, если значение TextFielA не пусто?
Я вижу два подхода в дополнение к идее @Marcin.
Условно вызовите setRequired()
для соответствующих элементов, создав метод preValidate()
в форме и вызвав его в своем контроллере. [На самом деле та же идея, что и @Marcin, но вдавлена в саму форму, что делает контроллер немного более компактным.]
Создайте настраиваемый валидатор, называемый чем-то вроде ConditionallyRequired
, который принимает в качестве опции имя поля «другого поля». Затем прикрепите этот валидатор к каждому элементу, задав ему имя «другого» элемента. Затем в методе isValid($value, $context)
валидатора условно проверьте $value
, если $context['otherfield']
не пусто.
Вы могли сделать следующее:
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
}
}
По сути, вы добавляете валидаторы после публикации, но до проверки формы. Надеюсь это поможет.