2009-11-10 18 views
5

Używam formularza Zend do tworzenia dynamicznej formy.Zatwierdzenie formularza Zend

Mam również zatwierdzenie formularza Zend.

Próba usunięcia dynamicznego sprawdzania poprawności, ale nie przynosi żadnego sukcesu.

Czy możesz pomóc mi usunąć Zend Validation.

Bellow jest kod do sprawdzania poprawności usunięcia:

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

Daj mi znać, czy mój kod jest posiadanie każdej kwestii

Dzięki Mohammad Tareque

Odpowiedz

4

Należy usunąć walidatora PRZED powołania $ form-> isValid().

1

kod jest usunięcie walidator wg nazwy

$value->removeValidator('ele_4af42ceac7810'); 

Jest to zazwyczaj coś NotEmpty lub Regex w przeciwieństwie do nazwy pierwiastka.

Może chcesz

$value->clearValidators(); 

Również +1 Ismael - należy ją usunąć przed wywołaniem $form->isValid()

3

roztworze wymyśliłem był przesłanianie metody isValid na moim klasy formularza i usuwanie walidator na polu hasła, jeśli pozostało puste:

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

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

$this->form jest określany postaci b Rozszerzony przez kompozycję rozwiązanie działa również przy rozszerzaniu klasy potomnej Zend Form.

Wystarczy marginesie, to rozwiązanie nie będzie działać, jeśli pole hasło jest wymagane