2010-12-23 10 views
5

Me pregunto si es posible usar el flash messenger sin redirigir? p.ej. Después de un inicio de sesión fallido, quiero seguir mostrando el formulario, no se requiere redirección.Posible usar FlashMessenger sin redirigir?

public function loginAction() { 
    $form = new Application_Form_Login(); 

    ... 

    if ($this->getRequest()->isPost() && $form->isValid($this->getRequest()->getParams())) { 
    $authAdapter = new Application_Auth_Adapter($form->getValue('username'), $form->getValue('password')); 
    if ($this->auth->authenticate($authAdapter)->isValid()) { 
     ... 
    } else { 
     // login failed 
     $this->flashMessenger->addMessage('Login failed. You may have entered an invalid username and/or password. Try again'); 
    } 
    } 

    $this->view->form = $form; 
} 

Respuesta

8

Puede recuperar mensajes flash sin redirección usando $ this-> flashMessenger-> getCurrentMessages(); Ejemplo:

$this->view->messages = array_merge(
    $this->_helper->flashMessenger->getMessages(), 
    $this->_helper->flashMessenger->getCurrentMessages() 
); 
$this->_helper->flashMessenger->clearCurrentMessages(); 
+1

En realidad, ni siquiera tiene que usar FMer en absoluto. Simplemente puede escribir $ this-> view-> messages = array ('mi mensaje', 'mi mensaje 2'); –

+0

¿No hay forma de 'setCurrentMessages()'? No quiero mostrar siempre todos los mensajes. –

+1

Los mensajes se agregan solo por la función addMessage(). La diferencia entre getMessages() y getCurrentMessages() es que el primero se utiliza para obtener mensajes que se guardaron en la página anterior antes de redirigir y este último puede recuperar los mensajes que se establecieron durante el procesamiento de la página actual. – ischenkodv

3

Claro, usted puede. Pero normalmente adjunto el mensaje de error de autenticación al formulario en sí. De hecho, incluso cuando falla la validación a nivel de formulario, me gusta mostrar algo así como "Tenga en cuenta los errores a continuación". Por lo tanto, tratar a estos dos casos por separado:

public function loginAction() 
{ 
    $form = new Application_Form_Login(); 
    if ($this->getRequest()->isPost()){ 
     if ($form->isValid($this->getRequest()->getPost())){ 
      $username = $form->getValue('username'); 
      $userpass = $form->getValue('userpass'); 
      $adapter = new Application_Model_AuthAdapter($username, $userpass); 
      $result = $this->_auth->authenticate($adapter); 
      if ($result->isValid()){ 
       // Success. 
       // Redirect... 
      } else { 
       $form->setErrors(array('Invalid user/pass')); 
       $form->addDecorator('Errors', array('placement' => 'prepend')); 
      } 
     } else { 
      $form->setErrors(array('Please note the errors below')); 
      $form->addDecorator('Errors', array('placement' => 'prepend')); 
     } 
    } 
    $this->view->form = $form; 
} 
+0

¿Cómo puedo hacerlo? Con mi código anterior, los mensajes del flash messenger solo se muestran después de una actualización –

+4

Esta es una de las cosas que no me gustan de FlashMessenger; solo reside en el nivel del controlador. Para mí, esta empresa de mensajería instantánea debe ser un proceso centrado en la visualización. Es por eso que utilizo en gran medida un asistente de visualización llamado [priorityMessenger] (http://emanaton.com/code/php/zendprioritymessenger). Para que el FlashMessenger actual sea útil, puede consultar [ayuda de vista de FlashMessenger de Robert Basic] (https://github.com/robertbasic/phpplaneta/blob/master/library/PPN/View/Helper/FlashMessenger.php). En su caso, sin actualización, sigo creyendo que es más sencillo adjuntar errores al formulario. –

Cuestiones relacionadas