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();
}
// ...
}
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
}
¿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