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

Agregar Filtro A Elemento Form

Estas en el tema de Agregar Filtro A Elemento Form en el foro de Zend en Foros del Web. Hola, como hago para agregar un filtro a un elemento de un formulario, quisiera aplicar ltrim($str, "0")....
  #1 (permalink)  
Antiguo 01/04/2011, 08:53
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 9 meses
Puntos: 1
Agregar Filtro A Elemento Form

Hola, como hago para agregar un filtro a un elemento de un formulario, quisiera aplicar ltrim($str, "0").
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!
  #2 (permalink)  
Antiguo 01/04/2011, 09:09
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: Agregar Filtro A Elemento Form

Puedes usar el Zend_Filter_Callback.

Saludos.
  #3 (permalink)  
Antiguo 01/04/2011, 09:10
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Agregar Filtro A Elemento Form

Verifica si este material te ayuda http://framework.zend.com/manual/en/...ements.filters
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 01/04/2011, 09:26
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Agregar Filtro A Elemento Form

Cita:
Iniciado por GatorV Ver Mensaje
Puedes usar el Zend_Filter_Callback.

Saludos.
Me gustó esta clase pero no se como agregarlo al siguiente objeto:
Código PHP:
        $form->addElement('text''phone', array(
            
'Label' => 'Teléfono',
            
'Description' => 'El teléfono debe contener código de área sin anteponer 0, ni 15 para celulares.',
            
'Validators' => array(
                
'Digits',
                array(
'StringLength'false, array(1010))
            ),
            
'Required' => false
        
)); 
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!
  #5 (permalink)  
Antiguo 01/04/2011, 09:59
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: Agregar Filtro A Elemento Form

Puedes usar algo así:
Código PHP:
Ver original
  1. $form->addElement('text', 'phone', array(
  2.     'Label' => 'Teléfono',
  3.     'Description' => 'El teléfono debe contener código de área sin anteponer 0, ni 15 para celulares.',
  4.     'Validators' => array(
  5.         'Digits',
  6.         array('StringLength', false, array(10, 10))
  7.     ),
  8.     'Required' => false,
  9.     'Filters' => array(
  10.         array('Callback', function($value) {
  11.             return ltrim($value, '0');
  12.         })
  13.     )
  14. ));

Saludos.
  #6 (permalink)  
Antiguo 01/04/2011, 13:20
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Agregar Filtro A Elemento Form

Cita:
Iniciado por GatorV Ver Mensaje
Puedes usar algo así:
Código PHP:
Ver original
  1. $form->addElement('text', 'phone', array(
  2.     'Label' => 'Teléfono',
  3.     'Description' => 'El teléfono debe contener código de área sin anteponer 0, ni 15 para celulares.',
  4.     'Validators' => array(
  5.         'Digits',
  6.         array('StringLength', false, array(10, 10))
  7.     ),
  8.     'Required' => false,
  9.     'Filters' => array(
  10.         array('Callback', function($value) {
  11.             return ltrim($value, '0');
  12.         })
  13.     )
  14. ));

Saludos.
Muchas gracias, pero hay algo que esta mal porque me tira el siguiente error:
Código:
syntax error, unexpected T_FUNCTION, expecting ')'
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!
  #7 (permalink)  
Antiguo 01/04/2011, 13:27
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Agregar Filtro A Elemento Form

¿Cuál es tu versión de PHP? Si no te funciona usando function(), puedes usar create_function.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 01/04/2011, 13:33
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Agregar Filtro A Elemento Form

Cita:
Iniciado por abimaelrc Ver Mensaje
¿Cuál es tu versión de PHP? Si no te funciona usando function(), puedes usar create_function.
Que versión tengo que tener para que me funcione del otro modo?
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!
  #9 (permalink)  
Antiguo 01/04/2011, 13:37
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Agregar Filtro A Elemento Form

Las funciones anónimas están a partir de PHP 5.3+, porque no te creas un custom filter ?, podría tener por opción left|right + el charlist.
__________________
http://es.phptherightway.com/
thats us riders :)
  #10 (permalink)  
Antiguo 01/04/2011, 13:42
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Agregar Filtro A Elemento Form

Cita:
Iniciado por masterpuppet Ver Mensaje
Las funciones anónimas están a partir de PHP 5.3+, porque no te creas un custom filter ?, podría tener por opción left|right + el charlist.
Ah muchas gracias, no me pongo a crear un custom filter porque ya existe una funcion nativa del código que es ltrim();

GatorV, reemplacé function por create_function pero no me anda:
Código PHP:
        $callback create_function('$arg''return ltrim($arg, "0");');
        
$form->addElement('text''phone', array(
            
'Label' => 'Teléfono',
            
'Description' => 'El teléfono debe contener código de área sin anteponer 0, ni 15 para celulares.',
            
'Filters' => array(
                array(
'Callback'$callback($_POST['phone']))
            ),
            
'Validators' => array(
                
'Digits',
                array(
'StringLength'false, array(1012))
            ),
            
'Required' => false,
        )); 
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!

Última edición por CyberMauher; 01/04/2011 a las 14:05
  #11 (permalink)  
Antiguo 01/04/2011, 14:06
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Agregar Filtro A Elemento Form

Con ese criterio no existirían los filters, son wrappers a funciones nativas, pero bueno, probaste con StringTrim ?. algo así puede funcionar:

Código PHP:
Ver original
  1. ...
  2. 'filters'  => array(
  3.     array('StringTrim', '^0')
  4. )
  5. ...
__________________
http://es.phptherightway.com/
thats us riders :)
  #12 (permalink)  
Antiguo 01/04/2011, 14:33
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: Agregar Filtro A Elemento Form

Tendrías que hacer algo así:
Código PHP:
Ver original
  1. $callback = create_function('$arg', 'return ltrim($arg, "0");');
  2. $form->addElement('text', 'phone', array(
  3.     'Label' => 'Teléfono',
  4.     'Description' => 'El teléfono debe contener código de área sin anteponer 0, ni 15 para celulares.',
  5.     'Filters' => array(
  6.         array('Callback', $callback)
  7.     ),
  8.     'Validators' => array(
  9.         'Digits',
  10.         array('StringLength', false, array(10, 12))
  11.     ),
  12.     'Required' => false,
  13. ));

Saludos.
  #13 (permalink)  
Antiguo 01/04/2011, 15:12
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Agregar Filtro A Elemento Form

Cita:
Iniciado por masterpuppet Ver Mensaje
Con ese criterio no existirían los filters, son wrappers a funciones nativas, pero bueno, probaste con StringTrim ?. algo así puede funcionar:

Código PHP:
Ver original
  1. ...
  2. 'filters'  => array(
  3.     array('StringTrim', '^0')
  4. )
  5. ...
Cita:
Iniciado por GatorV Ver Mensaje
Tendrías que hacer algo así:
Código PHP:
Ver original
  1. $callback = create_function('$arg', 'return ltrim($arg, "0");');
  2. $form->addElement('text', 'phone', array(
  3.     'Label' => 'Teléfono',
  4.     'Description' => 'El teléfono debe contener código de área sin anteponer 0, ni 15 para celulares.',
  5.     'Filters' => array(
  6.         array('Callback', $callback)
  7.     ),
  8.     'Validators' => array(
  9.         'Digits',
  10.         array('StringLength', false, array(10, 12))
  11.     ),
  12.     'Required' => false,
  13. ));

Saludos.
No funciona de ninguna de las dos maneras.
Del último código que postie, se ejecuta la función e inclusive hace el trim pero no se ve reflejado cuando obtengo el valor "$values = $form->getValues();".
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!
  #14 (permalink)  
Antiguo 01/04/2011, 15:18
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: Agregar Filtro A Elemento Form

Prueba entonces así:
Código PHP:
Ver original
  1. $callback = create_function('$arg', 'return ltrim($arg, "0");');
  2. $form->addElement('text', 'phone', array(
  3.     'Label' => 'Teléfono',
  4.     'Description' => 'El teléfono debe contener código de área sin anteponer 0, ni 15 para celulares.',
  5.     'Filters' => array(
  6.         array('Callback', array($callback))
  7.     ),
  8.     'Validators' => array(
  9.         'Digits',
  10.         array('StringLength', false, array(10, 12))
  11.     ),
  12.     'Required' => false,
  13. ));

El paso de los parámetros recuerdo que tiene que ser en un array.

Saludos.
  #15 (permalink)  
Antiguo 01/04/2011, 15:43
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Agregar Filtro A Elemento Form

Cita:
Iniciado por GatorV Ver Mensaje
Prueba entonces así:
Código PHP:
Ver original
  1. $callback = create_function('$arg', 'return ltrim($arg, "0");');
  2. $form->addElement('text', 'phone', array(
  3.     'Label' => 'Teléfono',
  4.     'Description' => 'El teléfono debe contener código de área sin anteponer 0, ni 15 para celulares.',
  5.     'Filters' => array(
  6.         array('Callback', array($callback))
  7.     ),
  8.     'Validators' => array(
  9.         'Digits',
  10.         array('StringLength', false, array(10, 12))
  11.     ),
  12.     'Required' => false,
  13. ));

El paso de los parámetros recuerdo que tiene que ser en un array.

Saludos.
Lo mismo se ejecuta pero no modifica el valor en el elemento.
También te quiero decir que si pongo solamente $callback sin el argumento $_POST['phone'], cuando ejecuta la función $arg no contiene nada.
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!

Última edición por CyberMauher; 01/04/2011 a las 15:54
  #16 (permalink)  
Antiguo 01/04/2011, 16:00
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: Agregar Filtro A Elemento Form

Debes de pasarla sin el argumento, ya que por defecto Zend inyecta el valor correcto, intenta esto:
Código PHP:
Ver original
  1. $callback = create_function('$arg', 'return ltrim($arg, "0");');
  2. $filter = new Zend_Filter_Callback($callback);
  3. $form->addElement('text', 'phone', array(
  4.     'Label' => 'Teléfono',
  5.     'Description' => 'El teléfono debe contener código de área sin anteponer 0, ni 15 para celulares.',
  6.     'Filters' => array(
  7.         $filter
  8.     ),
  9.     'Validators' => array(
  10.         'Digits',
  11.         array('StringLength', false, array(10, 12))
  12.     ),
  13.     'Required' => false,
  14. ));

Saludos.
  #17 (permalink)  
Antiguo 01/04/2011, 16:08
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Agregar Filtro A Elemento Form

Cita:
Iniciado por GatorV Ver Mensaje
Debes de pasarla sin el argumento, ya que por defecto Zend inyecta el valor correcto, intenta esto:
Código PHP:
Ver original
  1. $callback = create_function('$arg', 'return ltrim($arg, "0");');
  2. $filter = new Zend_Filter_Callback($callback);
  3. $form->addElement('text', 'phone', array(
  4.     'Label' => 'Teléfono',
  5.     'Description' => 'El teléfono debe contener código de área sin anteponer 0, ni 15 para celulares.',
  6.     'Filters' => array(
  7.         $filter
  8.     ),
  9.     'Validators' => array(
  10.         'Digits',
  11.         array('StringLength', false, array(10, 12))
  12.     ),
  13.     'Required' => false,
  14. ));

Saludos.
Ah ok, bueno de esta manera tampoco funciona. Hice un echo "holaaaaa" dentro de la función antes del return y no imprimió nada, parece ser que no entra a la función de este modo.
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!
  #18 (permalink)  
Antiguo 01/04/2011, 16:13
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: Agregar Filtro A Elemento Form

Recuerda que los filtros se aplican después de que el elemento es valido, y cuando haces un $form->getValues().

Saludos.
  #19 (permalink)  
Antiguo 01/04/2011, 16:26
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Agregar Filtro A Elemento Form

Cita:
Iniciado por GatorV Ver Mensaje
Recuerda que los filtros se aplican después de que el elemento es valido, y cuando haces un $form->getValues().

Saludos.
Ah no lo sabia pero lo estoy haciendo bien:
Código PHP:
if ($form->isValid($_POST)) {
  
$values $form->getValues();

Puede encontrar una solución más limpia para funciones nativas, lo dejo para alguien que le interese:
Código PHP:
        $form->addElement('text''phone', array(
            
'Label' => 'Teléfono',
            
'Description' => 'El teléfono debe contener código de área sin anteponer 0, ni 15 para celulares.',
            
'Validators' => array(
                
'Digits',
                
//array('regex', false, '/^[1-9]/'),
                
array('StringLength'false, array(1012))
            ),
            
'Required' => false,
            
'Filters' => array(
                array(
'Callback', array('ltrim''0'))
            )
        )); 
SALUDOS, Y MUCHAS GRACIAS A TODOS!
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!

Última edición por CyberMauher; 02/04/2011 a las 16:17

Etiquetas: frameworks-y-php-orientado-a-objetos
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 15:16.