3 votes

Zend_Form - Comment ajouter un validateur après que le formulaire ait été soumis ?

J'ai 2 champs de texte dans mon formulaire.

  1. TextFieldA - non requis
  2. 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 ?

2voto

David Weinraub Points 11685

Je vois deux approches en plus de l'idée de @Marcin.

  1. 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).

  2. 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.

1voto

Marcin Points 14295

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.com

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.

Powered by:

X