2009-11-10 13 views
5

Ich benutze Zend Form um dynamische Form zu erstellen.Zend Formular Validierung

Ich habe auch Zend Form Validierung.

Versuch, die Validierung dynamisch zu entfernen, aber keinen Erfolg zu erzielen.

Können Sie plz mir helfen, Zend-Validierung zu entfernen.

Bellow ist mein Code für entfernen Validierung:

$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'); 
      } 
     } 
    } 
} 

Lassen Sie mich wissen, ob mein Code jede Frage

Dank Mohammad Tareque

Antwort

4

ist mit Sie sollten den Validator VOR Berufung entfernen $ form-> isValid().

1

Ihr Code ist einen Validator nach Namen Entfernen

$value->removeValidator('ele_4af42ceac7810'); 

Dies ist in der Regel so etwas wie NotEmpty oder Regex als den Elementnamen entgegen.

Vielleicht möchten Sie

$value->clearValidators(); 

, auch +1 Ismael - sollten Sie es entfernen, bevor $form->isValid()

3

Die Lösung Aufruf kam ich mit war das Überschreiben der isValid Methode auf meiner Form Klasse und Entfernen der Validator auf dem Feld Kennwort ein, wenn es wurde leer gelassen:

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

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

die $this->form die Form b bezeichnet wird Diese Lösung wird durch die Zusammensetzung erweitert und funktioniert auch, wenn eine Zend-Form-Nachkomme-Klasse erweitert wird.

nur eine Randnotiz, diese Lösung wird nicht funktionieren, wenn wird das Passwort-Feld erforderlich