Foros del Web » Programando para Internet » PHP » Zend »

Problema con mensajes y zend form

Estas en el tema de Problema con mensajes y zend form en el foro de Zend en Foros del Web. Hola a todos, Estoy usando zend_form para mostrar un formulario y tenia anteriormente un campo de email de esta manera: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver ...
  #1 (permalink)  
Antiguo 20/10/2010, 15:12
 
Fecha de Ingreso: junio-2009
Mensajes: 79
Antigüedad: 14 años, 10 meses
Puntos: 0
Pregunta Problema con mensajes y zend form

Hola a todos,

Estoy usando zend_form para mostrar un formulario y tenia anteriormente un campo de email de esta manera:

Código PHP:
Ver original
  1. $email_users = new Zend_Form_Element_Text('email_users');
  2. $email_users->setLabel('Email:')
  3.                     ->setRequired(false)
  4.                     ->addFilter('StripTags')
  5.                     ->addFilter('StringTrim')
  6.                     ->addValidator('EmailAddress')
  7.                     ->setErrorMessages(array('messages' => 'Email invalido'));

Me servia sin problemas porque reemplazaba todos los mensajes de error si el email no era valido por cualquier razon, ahora he tenido que agregarle otra validacion para saber si ya existe en la base de datos y tuve que quitarle el metodo setErrorMessages ya que necesitaba mostrar un mensaje especifico cuando el email existia en la BD, lo hice de esta manera:

Código PHP:
Ver original
  1. $email_users = new Zend_Form_Element_Text('email_users');
  2. $email_users->setLabel('Email:')
  3.                     ->setRequired(false)
  4.                     ->addFilter('StripTags')
  5.                     ->addFilter('StringTrim')
  6.                     ->addValidators(array(
  7.                         array('EmailAddress', true,
  8.                             array(
  9.                                 'messages' =>
  10.                                     array(Zend_Validate_EmailAddress::INVALID => 'Email invalido')
  11.                                 )
  12.                         ),
  13.                         array('Db_NoRecordExists', true,
  14.                             array(
  15.                                 'messages' =>
  16.                                   array(Zend_Validate_Db_NoRecordExists::ERROR_RECORD_FOUND => 'Este email ya esta registrado'),
  17.                                 'table' => 'users',
  18.                                 'field' => 'email_users')
  19.                         )));

La funcionalidad esta perfecta, el problema es que ahora como tengo 2 validadores tengo que agregarlos en forma de array y especificar el tipo de error para cada mensaje e igual me sigue mostrando los mensajes por defecto de zend validate.

Existe alguna manera de decirle que sin importar el tipo de error, si es de tipo 'EmailAddress' que muestre el mismo mensaje? (exactamente la misma funcionalidad que tenia antes de agregarle este validador) Porque cuando el correo ya existe el mensaje se muestra sin problemas.

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 26/10/2010, 15:57
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años
Puntos: 2
Respuesta: Problema con mensajes y zend form

Hola por que no intentestas esto:

Código PHP:
$email_users = new Zend_Form_Element_Text('email_users');
$email_users->setLabel('Email:')
                    ->
setRequired(false)
                    ->
addFilter('StripTags')
                    ->
addFilter('StringTrim')
                    ->
addValidators(array(
                        array(
'EmailAddress'true,
                            array(
                                
'messages' =>
                                    array(
Zend_Validate_EmailAddress::INVALID => 'Email invalido')
                                )
                        )));

$emailValidator = new Zend_Validate_Db_NoRecordExists(
                                                                    array(
                                                                    
'table' => 'user',
                                                                    
'field' => 'email_user'
                                                                    
)
                                                                    );

            
$emailValidator->setMessage("Este email ya existe");
            
$emailUsers->addValidator($emailValidator); 
El orden de como se muestra ya solo depende de cual pones primero en el script arrriba, en este caso el resultado serár:

Código PHP:
email Invalido
Este email ya existe 
Espero te sirva. Me comentas como te va.

Un saludo
  #3 (permalink)  
Antiguo 26/10/2010, 16:13
 
Fecha de Ingreso: junio-2009
Mensajes: 79
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Problema con mensajes y zend form

Hola amigo, intente de la siguiente manera:

Código PHP:
Ver original
  1. $email_users = new Zend_Form_Element_Text('email_users');
  2.         $email_users->setLabel('Email:')
  3.                    ->setRequired(false)
  4.                    ->addFilter('StripTags')
  5.                    ->addFilter('StringTrim')
  6.                    ->addValidator('EmailAddress')
  7.                    ->addErrorMessage("Email invalido");
  8.  
  9.         $emailValidator = new Zend_Validate_Db_NoRecordExists(
  10.                                    array(
  11.                                        'table' => 'users',
  12.                                        'field' => 'email_users',
  13.                                        'messages' => array(Zend_Validate_Db_NoRecordExists::ERROR_RECORD_FOUND => 'Email existente')
  14.                                    )
  15.                            );
  16.  
  17.        $email_users->addValidator($emailValidator);

Pero si el formato es invalido o si el email ya existe me muestra el mismo mensaje de "Email invalido", creo que la funcion addErrorMessage sobreescribe todos los mensajes de error sin importar que el validador halla sigo agregado despues :(
  #4 (permalink)  
Antiguo 26/10/2010, 16:43
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años
Puntos: 2
Respuesta: Problema con mensajes y zend form

Hola Otra vez intenta con esto:

Código PHP:
$email_users = new Zend_Form_Element_Text('email_users');
$email_users->setLabel('Email:')
                    ->
setRequired(false)
                    ->
addFilter('StripTags')
                    ->
addFilter('StringTrim')
                    ->
addValidators(array(
                        array(
'EmailAddress'true,
                            array(
                                
'messages' =>
                                    array(
Zend_Validate_EmailAddress::INVALID_FORMAT => 'Email invalido')
                                )
                        )));

$emailValidator = new Zend_Validate_Db_NoRecordExists(
                                                                    array(
                                                                    
'table' => 'user',
                                                                    
'field' => 'email_user'
                                                                    
)
                                                                    );

            
$emailValidator->setMessage("Este email ya existe");
            
$emailUsers->addValidator($emailValidator); 
Intenta como t lo estoy pasando, Yo le he probado y funciona muy bien.

Un saludo,
  #5 (permalink)  
Antiguo 26/10/2010, 20:45
 
Fecha de Ingreso: junio-2009
Mensajes: 79
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Problema con mensajes y zend form

Hola de nuevo, intente exactamente como me dijistes y "casi" funciona ya que si coloco por ejemplo "hola" en el input me muestra el mensaje "Email invalido" pero si coloco "hola@email" me muestra los 3 mensajes de error por defecto de zend validate. Intente hacerlo a la inversa:

Código PHP:
Ver original
  1. $email_users = new Zend_Form_Element_Text('email_users');
  2.         $email_users->setLabel('Email:')
  3.                     ->setRequired(false)
  4.                     ->addFilter('StripTags')
  5.                     ->addFilter('StringTrim')
  6.                     ->addValidators(array(
  7.                         array('Db_NoRecordExists', true,
  8.                             array(
  9.                                 'messages' =>
  10.                                     array(Zend_Validate_Db_NoRecordExists::ERROR_RECORD_FOUND => 'Este email ya esta registrado'),
  11.                                 'table' => 'users',
  12.                                 'field' => 'email_users')
  13.                         )
  14.                     ));
  15. $emailValidator = new Zend_Validate_EmailAddress()
  16. $emailValidator->setMessage('Formato de email invalido');
  17.  
  18. $email_users->addValidator($emailValidator);

Pero me muestra siempre los mensajes por defecto pareciera como si no le hiciera caso al metodo setMessage :s

Etiquetas: zend_validate, zend-framework, zend-form
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:52.