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

Problema en zend para añadir a un form un validator personalizado

Estas en el tema de Problema en zend para añadir a un form un validator personalizado en el foro de Zend en Foros del Web. Hola Tengo un formulario, y en el campo email, el usuario podrá introducir varios emails separados por comas, luego hago un explode y añado dichos ...
  #1 (permalink)  
Antiguo 26/11/2011, 10:49
 
Fecha de Ingreso: noviembre-2005
Mensajes: 186
Antigüedad: 19 años
Puntos: 1
Pregunta Problema en zend para añadir a un form un validator personalizado

Hola

Tengo un formulario, y en el campo email, el usuario podrá introducir varios emails separados por comas, luego hago un explode y añado dichos email al bcc de Zend Mail, pues bien, como hay un limite de emails que el usuario puede enviar, necesito una validación personalizada.

Leyendo en la documentación de Zend, he seguido unos pasos, pero como la documentación no esta clara o yo no me entero, me da error. Os cuento como lo he hecho.

En la carpeta library, he creado una carpeta llamada Custom y dentro de esta Validators

he creado un archivo php llamado Custom_Validators_LimiteEmails.php, cuyo código es:

Código PHP:
<?php
class Custom_Validators_LimiteEmails extends Zend_Validate_Abstract
{    
    public function 
isValid($value)
    {
        
$this->_setValue($value);
         
       
        
$maximo5;

        
$emails explode(','$value);
        if (
count($emails)>$maximo) {
            
$this->_error();
            return 
false;
        }
 
        return 
true;
    }
}
luego el código de mi formulario es:

Código PHP:
$email = new Zend_Form_Element_Text('email');
         
$email->setLabel('emails');
         
$email->setRequired(true)
                   ->
addValidator('NotEmpty',true)
                   ->
addValidator(new Custom_Validators_LimiteEmails()); 
además en el application.ini he añadido esto:

autoloadernamespaces[] = Custom_

pues bien, me da este error:

Código:
Warning: include_once(Custom\Validators\LimiteEmails.php) [function.include-once]: failed to open stream: No such file or directory in ...\library\Zend\Loader.php on line 146

Warning: include_once() [function.include]: Failed opening 'Custom\Validators\LimiteEmails.php' for inclusion (include_path='C:\xampp\htdocs\...\application/../library;C:\xampp\htdocs\...\library;.;C:\Program Files (x86)\Zend\ZendServer\bin\pear;C:\Program Files (x86)\Zend\ZendServer\share\ZendFramework\library;C:\Program Files (x86)\Zend\ZendServer\bin\PEAR\PHPUnit') in C:\xampp\htdocs\...\library\Zend\Loader.php on line 146

Fatal error: Class 'Custom_Validators_LimiteEmails' not found in C:\xampp\htdocs\...\application\forms\Formulario.php on line 43
  #2 (permalink)  
Antiguo 26/11/2011, 16:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Problema en zend para añadir a un form un validator personalizado

Cambia Custom_Validators_LimiteEmails.php por LimiteEmails.php.

Saludos.
  #3 (permalink)  
Antiguo 29/11/2011, 15:25
 
Fecha de Ingreso: noviembre-2005
Mensajes: 186
Antigüedad: 19 años
Puntos: 1
Respuesta: Problema en zend para añadir a un form un validator personalizado

exacto, con la nueva denominación se ha resuelto el problema, ahora lo que quiero es personalizar el mensaje y cargarlo directamente de un archivo ini llamado datos.ini, pero no sé que poner, porque si en $this->error(valor devuelto por la función), no me sale nada.

Y si el resultado de la función lo pongo dónde está comentado en el siguiente código da error:

Código PHP:
class Custom_Validators_LimiteEmails extends Zend_Validate_Abstract 
{     

    const 
MSG_MAXIMUM 'msgMaximum';
     protected 
$_messageTemplates = array(
        
self::MSG_MAXIMUM => "TEXTO PERSONALIZADO" // esto me da error $this->_textoPersonalizado()
        
        
);
    function 
_textoPersonalizado(){
        
        
$conf = new Zend_Config_Ini('/path/to/file/datos.ini');
    return 
$conf->miMensaje;
        
    }
    public function 
isValid($value
    { 
        
$this->_setValue($value); 
          
        
        
$maximo5

        
$emails explode(','$value); 
        if (
count($emails)>$maximo) { 
            
$this->_error(self::MSG_MAXIMUM); 
            return 
false
        } 
  
        return 
true
    } 

  #4 (permalink)  
Antiguo 29/11/2011, 15:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Problema en zend para añadir a un form un validator personalizado

Lo debes de asignar en el contructor de tu clase, de esa forma se asigna al crear el elemento.

Saludos.
  #5 (permalink)  
Antiguo 29/11/2011, 16:07
 
Fecha de Ingreso: noviembre-2005
Mensajes: 186
Antigüedad: 19 años
Puntos: 1
Respuesta: Problema en zend para añadir a un form un validator personalizado

Hay algo que no hay bien, he creado un constructor, cuando creo la clase le paso el valor, comprobado que en el constructor llega el valor y que llega al metodo isValid, pero no sale nada.

Pongo el código tal y como lo tengo, debe ser algo fácil, pero se me escapa algo y no lo llego a ver.

Código PHP:
class Custom_Validators_LimiteEmails extends Zend_Validate_Abstract  
{      

    const 
MSG_MAXIMUM 'msgMaximum'
     protected 
$_messageTemplates = array( 
        
self::MSG_MAXIMUM => "TEXTO PERSONALIZADO" // esto me da error $this->_textoPersonalizado() 
         
        
);
    private 
$msgError ""
    function 
__construct($value){ 
         
        
$this->msgError $value;
         
    } 
    public function 
isValid($value)  
    {  
        
$this->_setValue($value);  
           
         
        
$maximo5;  

        
$emails explode(','$value);  
        if (
count($emails)>$maximo) {  
            
$this->_error($this->msgError);  
            return 
false;  
        }  
   
        return 
true;  
    }  

  #6 (permalink)  
Antiguo 29/11/2011, 17:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Problema en zend para añadir a un form un validator personalizado

Lo que tienes que pasarle a $this->_error es el nombre de la constante que no paso la validación, en tu caso sería $this->_error(self::MSG_MAXIMUM).

Saludos.
  #7 (permalink)  
Antiguo 30/11/2011, 03:58
 
Fecha de Ingreso: noviembre-2005
Mensajes: 186
Antigüedad: 19 años
Puntos: 1
Respuesta: Problema en zend para añadir a un form un validator personalizado

Ya funciona, ahora para terminar de perfeccionarlo me gustaría añadir otro archivo en la carpeta validators, con otra validación, pero ponerle una condición, es decir si la condición anterior no se cumple, que no muestre el siguiente error.

Pongo código de ejemplo.

Código PHP:
$email = new Zend_Form_Element_Text('email');
         
$email->setLabel('emails');
         
$email->setRequired(true)
                   ->
addValidator('NotEmpty',true)
                   ->
addValidator(new Custom_Validators_LimiteEmails('valores varios')
                   ->
addValidator(new Custom_Validators_OtraValidacion('valores varios')
); 
pues bien, lo que quiero es que si salta el error en LimiteEmails, aunque el formulario no cumpla la validación de OtraValidacion.php, que se la salte, pues no quiero que aparezca las dos a la vez.

Y si LimiteEmails es correcto, entonces que compruebe si OtraValidacion es correcto o no, y sólo entonces.

Un saludo.
  #8 (permalink)  
Antiguo 30/11/2011, 09:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Problema en zend para añadir a un form un validator personalizado

El segundo parámetro de addValidator es el que permite hacer eso, su valor por defecto es false, necesitas indicarle true, el parámetro indica el romper o no la cadena de validación.

Saludos.

Etiquetas: framework, personalizado, php, validador, formulario
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 11:00.