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

Cómo mostrar la vista de una acción dentro de otra vista (sin Action View Helper)

Estas en el tema de Cómo mostrar la vista de una acción dentro de otra vista (sin Action View Helper) en el foro de Zend en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 21/02/2011, 05:43
 
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 14 años
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
  #2 (permalink)  
Antiguo 21/02/2011, 08:40
 
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 1
Respuesta: Cómo mostrar la vista de una acción dentro de otra vista (sin Action View

Amplío el post para explicar las razones de mi consulta.

En la web que estoy creando quiero que el formulario de Login se muestre dentro de una ventana modal flotante:

http://www.elwebmaster.com/articulos/ventana-modal-con-jquery-en-3-pasos

Para ello, el contenido de la ventana flotante -en este caso mi login.phtml- debe mostrarse previamente en el index (está oculto para no estropear la maquetación CSS).

La web saca el formulario a través de un botón Login y mediante javascript (jQuery) se muestra como ventana modal flotante.


Layout:

Código PHP:
<div id="principal">
                
                <?php echo $this->layout()->content?>
                
   
                
            </div>
Dentro de ese <div id="principal"> se renderiza el contenido de index.phtml (controlador index, action index):

index.phtml:

Código PHP:
Codigo html variado 

Con
Código PHP:
echo $this->action('login''regauth'); 
el index incluye el contenido de login.phtml y todo funciona como la seda. Pero estoy utilizando un Action View Helper y precisamente es lo que quiero evitar.

Muchas gracias por anticipado.

Última edición por nerthalas; 21/02/2011 a las 09:16
  #3 (permalink)  
Antiguo 21/02/2011, 14:45
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Cómo mostrar la vista de una acción dentro de otra vista (sin Action View

Porque no utilizas partial en la vista ?, igual te comento que lo mas idóneo es un action helper, ya que tenes que interceptar el request,
__________________
http://es.phptherightway.com/
thats us riders :)
  #4 (permalink)  
Antiguo 21/02/2011, 15:09
 
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 1
Respuesta: Cómo mostrar la vista de una acción dentro de otra vista (sin Action View

Cita:
Iniciado por masterpuppet Ver Mensaje
Porque no utilizas [URL="http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.p artial"]partial[/URL] en la vista ?, igual te comento que lo mas idóneo es un action helper, ya que tenes que interceptar el request,
Muchas gracias por las sugerencias, investigaré las opciones que planteas y trataré de resolver el entuerto.

Un saludo.

Etiquetas: view, acciones, vistas
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:10.