J'ai 2 champs de texte dans mon formulaire.
- TextFieldA - non requis
- TextFieldB - non requis
Après que l'utilisateur ait soumis le formulaire, Comment ajouter un validateur / setRequired(true) à TextFieldB si la valeur de TextFielA n'est pas vide ?
J'ai 2 champs de texte dans mon formulaire.
Après que l'utilisateur ait soumis le formulaire, Comment ajouter un validateur / setRequired(true) à TextFieldB si la valeur de TextFielA n'est pas vide ?
Je vois deux approches en plus de l'idée de @Marcin.
Appel conditionnel setRequired()
sur les éléments pertinents en créant un preValidate()
sur le formulaire et l'appeler dans votre contrôleur. (C'est vraiment la même idée que @Marcin, mais poussée vers le bas dans le formulaire lui-même, gardant le contrôleur un peu plus léger).
Créez un validateur personnalisé appelé comme suit ConditionallyRequired
qui accepte comme option le nom du champ de l'"autre champ". Attachez ensuite ce validateur à chaque élément, en le configurant avec le nom de l'élément "autre". Ensuite, dans la fenêtre du validateur isValid($value, $context)
méthode, test conditionnel $value
si $context['otherfield']
est non vide.
Vous pourriez faire comme suit :
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
}
}
En fait, vous ajoutez les validateurs après le message, mais avant la validation du formulaire. J'espère que cela vous aidera.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.