Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/05/2009, 19:29
miusuario
 
Fecha de Ingreso: mayo-2009
Mensajes: 12
Antigüedad: 14 años, 11 meses
Puntos: 0
Como dije en mi otro tema, estoy trabajando con formularios. Por norma, todos la información que sea texto se manejará en mayúsculas, menos el caso de un correo electrónico.

Para facilitar la tarea se me ocurrió que todos los formurios pueden tener el mismo action que se encargará de procesar la información, aplicar éste filtro de convertir todo lo que haya a mayúsculas, posteriormente llamar a un método que se encargaría de validar la parte del formulario correspondiente y de pasarla, redirigir a otra pantalla, igual con dicha redirección se limpia la petición para que si se le da recargar no se re-envie la información (un problema bastante común).

Esto es masomenos lo que tengo planteado:

Primero, un action que pintará el formulario ... nada especial:
Código PHP:
class MiController extends Zend_Controller_Action
{
    public function 
indexAction()
    {
        
// render a index.phtml con el código del formulario.
        // Se maneja un campo oculto con el action actual para futuras referencias.
        
$this->view->referer $this->getRequest()->getActionName();
    }

    
// ...

En este punto tengo una pregunta: ¿Cómo puedo saber el H TTP _REFERER con Zend Framework?; como no lo encontré, estoy manejando el dato con un campo oculto, como lo comento en el código.

Entonces, se llena el formulario y el action apunta a procesarAction:
Código PHP:
class MiController extends Zend_Controller_Action
{
    
// ... código anterior

    
public function procesarAction()
    {
        if (!
$this->_request->isPost()) {
            
$this->_redirect('/');
        }

        
$input $this->_request->getPost();

        
$filter = new Zend_Filter();
        
$filter->addFilter(new Zend_Filter_StringTrim())
               ->
addFilter(new Zend_Filter_StringToUpper());

        foreach (
$input as $key => $val) {
            
// Salvo los campos que contienen un correo, todo se pasa a mayúsculas
            
if ($key !== 'email') {
                
$input[$key] = $filter->filter($val);
            } else {
                
$input[$key] = Zend_Filter_StringToLower::filter($val);
            }
        }

        
// Entonces veo por el campo oculto qué formulario se llenó y llamo a
        // un método que se encargaría de validar la información
        
$referer $this->_request->getParam('referer');
        switch (
$referer) {
            case 
'index':
                
$redirect = ($this->validaIndex($input)) ? 'siguiente' $referer;
                break;
            
// ... case 'siguiente' ...
        
}

        
// Con la redirección evitamos el problema que sucede cuando se recarga la página
        // ¿Algún método para redirigir sin meter el nombre del controlador?
        
$this->_redirect('Mi/' $redirect);
    }

    
/**
     * Valida y guarda en sesión la información del formulario
     * 
     * @return bool True|False si pasa o no la validación
     */
    
private function validaIndex($input)
    {
        
// Aplicaría reglas de Zend_Validator para los campos de éste formulario
        // Guardaría la información con Zend_Session_Namespace
       
return true;
   }

   
// ... implementaría siguienteAction y validaSiguiente con la misma lógica

Igual me "sorprende" Zend_Filter no tenga un método para aplicar el filtro a un array de valores, por eso lo hago con un foreach().

¿Qué opinan de mi metodología?, ¿me estoy complicando?, ¿lo estoy planteando mal?, ¿le ven algún fallo? ...

################
Perdón que haya dividido el tema, pero me saltaba un aviso que por motivos de SPAM no podía publicar direcciones ni correos. Lo dividí para identificar donde estaba la dirección y correo pero no lo encontré ... quizá fue por lo largo

Última edición por GatorV; 18/05/2009 a las 20:20