2009-11-10 20 views
5

Estoy utilizando Zend Form para crear una forma dinámica.Zend formulario de validación

Tengo la validación de Zend Form también.

Tratando de eliminar la validación de forma dinámica, pero sin éxito.

Puede por favor ayúdame a eliminar Zend Validation.

Bellow es mi código de validación remove:

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

Avísame si mi código está teniendo ningún problema

Gracias Mohammad Tareque

Respuesta

4

Debe eliminar el validador ANTES llamada $ form-> isValid().

1

Su código es la eliminación de un validador por su nombre

$value->removeValidator('ele_4af42ceac7810'); 

Esto es típicamente algo así como NotEmpty o Regex en contraposición al nombre del elemento.

Tal vez usted quiere

$value->clearValidators(); 

Además, Ismael 1 - debe eliminarlo antes de llamar a $form->isValid()

3

La solución que se me ocurrió fue reemplazando el método isValid en mi clase de formulario y la eliminación de la validador en el campo de la contraseña si se deja en blanco:

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

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

el $this->form se hace referencia a la forma b Al extenderse por composición, la solución funciona al extender también una clase descendiente Zend Form.

Sólo una nota, esta solución no funcionará si serequiere el campo de contraseña

Cuestiones relacionadas