2010-12-23 7 views
5

Ich frage mich, ob es möglich ist, Flash Messenger ohne Redirect zu verwenden? z.B. Nach einer fehlgeschlagenen Anmeldung möchte ich weiterhin das Formular anzeigen, keine Weiterleitung erforderlich.Kann FlashMessenger ohne Umleitung verwendet werden?

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; 
} 

Antwort

8

Sie Flash-Mitteilungen ohne Umleitung abrufen können $ this-> flashMessenger-> getCurrentMessages(); Beispiel:

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

Eigentlich brauchst du FMer gar nicht zu benutzen. Sie können einfach $ this-> view-> messages = array schreiben ('meine Nachricht', 'meine Nachricht 2'); –

+0

Gibt es keine Möglichkeit 'setCurrentMessages()' '? Ich möchte nicht immer alle Nachrichten anzeigen. –

+1

Nachrichten werden nur von der Funktion addMessage() hinzugefügt. Der Unterschied zwischen getMessages() und getCurrentMessages() besteht darin, dass ersterer verwendet wird, um Nachrichten abzurufen, die vor der Weiterleitung auf der vorherigen Seite gespeichert wurden, und letzterer Nachrichten abrufen kann, die während der aktuellen Seitenverarbeitung festgelegt wurden. – ischenkodv

3

Sicher, Sie können. Aber normalerweise füge ich die Auth-Fehler-Nachricht an das Formular selbst an. Selbst wenn die Überprüfung auf Formularebene fehlschlägt, zeige ich gerne etwas wie "Bitte beachten Sie die Fehler unten" an. So behandle ich diese beiden Fälle getrennt:

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

Wie kann ich? Mit meinem obigen Code, zeigen Flash-Messenger-Nachrichten nur nach einer Aktualisierung –

+4

Dies ist eine der Dinge, die ich nicht über die FlashMessenger; Es befindet sich nur auf der Controller-Ebene. Für mich sollte dieses Flash-Messenger-Geschäft ein sichtzentrierter Prozess sein. Deshalb verwende ich hauptsächlich einen View-Helfer namens [priorityMessenger] (http://emanaton.com/code/php/zendprioritymessenger). Um den vorhandenen FlashMessenger nützlich zu machen, können Sie [Robert Basic's FlashMessenger View-Helper] (https://github.com/robertbasic/phpplaneta/blob/master/library/PPN/View/Helper/FlashMessenger.php) betrachten. In Ihrem Fall, ohne Aktualisierung, denke ich immer noch, dass es einfacher ist, Fehler an das Formular anzuhängen. –

Verwandte Themen