2009-11-10 3 views
5

J'utilise Zend Form pour créer une forme dynamique.Validation de formulaire Zend

J'ai également la validation Zend Form.

Essayer de supprimer dynamiquement la validation, mais sans succès.

Pouvez-vous m'aider à supprimer Zend Validation.

Bellow est mon code pour supprimer la validation:

$toRemValArray = array(); 
$toRemValArray[0] = 'ele_4af42ceac7810'; 

if(isset($_POST['btnPost_x'])){     
    if ($form->isValid($_POST)) { 
     $allElements = $form->getElements(); 
     foreach($allElements as $val){ 
      if(in_array('ele_4af42ceac7810',$toRemValArray)){ 
       $value = $form->getElement($val->getName()); 
       $value->removeValidator('ele_4af42ceac7810'); 
      } 
     } 
    } 
} 

Laissez-moi savoir si mon code est d'avoir toute question

Merci Mohammad Tareque

Répondre

4

Vous devez supprimer le validateur AVANT appel $ form-> isValid().

1

Votre code supprime un validateur par nom

$value->removeValidator('ele_4af42ceac7810'); 

Cela est généralement quelque chose comme NotEmpty ou Regex par opposition au nom de l'élément.

Peut-être que vous voulez

$value->clearValidators(); 

En outre, +1 Ismael - vous devez l'enlever avant d'appeler $form->isValid()

3

La solution que je suis venu avec était redéfinissant la méthode isValid sur ma classe de formulaire et le retrait du validateur sur le champ de mot de passe s'il a été laissé vide:

public function isValid($data) 
{ 
    if (empty($data['password'])) { 
     $this->form 
      ->getElement('password') 
      ->clearValidators(); 

     $this->form 
      ->getElement('password_confirm') 
      ->clearValidators(); 
    } 
    return $this->form->isValid($data); 
} 

le $this->form est fait référence à la forme b Eing étendu par la composition, la solution fonctionne également lors de l'extension d'une classe descendante Zend Form.

Juste une note de côté, cette solution ne fonctionnera pas si le mot de passe est requis