2011-04-30 3 views

Répondre

2

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

  1. conditionnellement appellent setRequired() sur les éléments pertinents en créant une méthode preValidate() sur la forme et de l'appeler dans votre contrôleur. [Vraiment la même idée que @Marcin, mais poussé vers le bas dans la forme elle-même, en gardant le contrôleur un peu plus maigre.]

  2. Créer un validateur personnalisé appelé quelque chose comme ConditionallyRequired qui accepte comme une option fieldname du « autre domaine ". Puis attachez ce validateur à chaque élément, en le configurant avec le nom de l'élément "other". Ensuite, dans la méthode isValid($value, $context) du validateur, testez conditionnellement $value si $context['otherfield'] est non vide.

1

Vous pouvez le 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    
    } 
} 

Fondamentalement, vous ajoutez les validateurs après le poste, mais avant que le formulaire est validé. J'espère que cela aide.

Questions connexes