Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/02/2011, 05:43
nerthalas
 
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 13 años, 5 meses
Puntos: 1
Cómo mostrar la vista de una acción dentro de otra vista (sin Action View Helper)

Saludos.

Necesito ayuda con el siguiente tema, por favor. Tengo un proyecto programado con Zend en el cual necesito mostrar y validar un formulario de Login, perteneciente al controlador regauth, dentro de la vista index, perteneciente a otro controlador distinto.

Actualmente, dentro de index.phtml, lo consigo con
Código PHP:
echo $this->action('login''regauth'); 
Lamentablemente, he estado informándome y tal proceso pertenece a la categoría de los Action View Helpers. Estos son altamente desaconsejables por varias razones, entre ellas porque rompen con el patrón MVC, además de que con el próximo ZF 2.0 desaparecerán del todo.

Tras leer otros post del foro creía haber encontrado la solución utilizando el Action Stack Plugin, pero parece ser que también desaparecerá.

Después de consultar varias webs he llegado a la conclusión de que la solución óptima pasa por crear un View Helper. ¿Pero cómo? Me siento bastante perdido.

En resumen: tengo un controlador regauth con una acción login que muestra y valida un formulario. Necesito integrar la vista login.phtml dentro de index.phtml validando el form correctamente.

¿Alguien me puede guiar, por favor?

Pongo partes del código por si aclara mejor el problema:

Controlador:

Código PHP:
class Principal_RegAuthController extends Zend_Controller_Action
{

    public function 
init()
    {
        
/* Initialize action controller here */
    
}

    public function 
indexAction()
    {
        
    }

//Método para el Login
    
public function loginAction()
    {
  
        {
        
//Creo un nuevo objeto con el form del logueo
                
$form = new Principal_Form_Login();
                
//Recojo el valor de la casilla recordarme
                
$recordar $form->getAttrib('recordarme');
                
//Compruebo el request
                
$request $this->getRequest();
                    
//Si ha sido enviado mediante POST lo valido y proceso
                    
if ($request->isPost()) {
                        if (
$form->isValid($request->getPost())) {
                            
//Nuevo objeto UsuarioLogicaNegocio
                            
$comprobarLogin = new Principal_Model_UsuarioLogicaNegocio();
                            
//Le aplico el metodo ValidarUsuario. Si retorna TRUE redirijo a INDEX
                            
try {
                                
$comprobarLogin->ValidarUsuario($form->getValues());
                            } catch (
Exception $e){
                                
$flashMessenger $this->_helper->flashMessenger;
                                
$flashMessenger->addMessage($e->getMessage());
                                
$this->_redirect('regauth/login');
                            }
                           
                            if(
$form->getValue('recordarme') == 1) {
                                
Zend_Session::rememberMe(1728000);
                            }
                            
                            
$this->_helper->redirector('index''index');
                        }
                    }
                
//Si el request no viene mediante POST muestro en la vista el formulario
                
$this->view->form $form;
        }   
    } 
La vista login.phtml

Código PHP:
<!---Menu flotante con ventana de Login-->
<div id="boxes">
    <!-- Start of Login Dialog -->  
    <div id="dialog1" class="window">
              <div class="d-header">
                  <p>Por favor, identifiquese</p>

                    <?php 
                        $this
->title 'Login';
                        
$this->headTitle($this->title);
                        echo 
$this->form;
                    
?>

                <div id="avisos">
                    <?php echo $this->flashMessenger() ?>
                </div> 
              </div>
              
              <div class="d-blank">
              </div>

    </div>
    
    <div id="mask"></div>
     
</div>
La vista index.phtml, donde quiero integrar login.phtml evitando el Action View Helper:

Código PHP:
<?php echo $this->action('login''regauth');?>

Última edición por nerthalas; 21/02/2011 a las 08:30