2010-12-23 27 views
5

Acaba flash haberciyi yeniden yönlendirmek mümkün mü acaba? Örneğin. Başarısız bir girişten sonra, formu görüntülemeye devam etmek istiyorum, yönlendirme gerekli değil.Yönlendirme olmadan FlashMessenger'ı kullanmak mümkün mü?

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

cevap

8

Sen) (kullanarak yönlendirme $ this-> flashMessenger-> getCurrentMessages olmadan flaş iletileri alabilir; Örnek:

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

Aslında hiç FMer kullanmanız bile gerekmiyor. Sadece bu $> view-> messages = array yazabilirsiniz ('mesajım', 'mesajım 2'); –

+0

setCurrentMessages() 'ın bir yolu yok mu? Her zaman tüm mesajları görüntülemek istemiyorum. –

+1

Mesajlar sadece addMessage() işlevi tarafından eklenir. GetMessages() ve getCurrentMessages() arasındaki fark, birincinin, yönlendirmeden önce önceki sayfada kaydedilen iletileri almak için kullanıldığı ve ikincisinin, geçerli sayfa işleme sırasında ayarlanmış olan iletileri alabilmesidir. – ischenkodv

3

Elbette, yapabilirsiniz. Ancak genellikle kimlik doğrulama iletisini formun kendisine eklerim. Aslında, form düzeyinde doğrulama başarısız olduğunda bile, "Lütfen aşağıdaki hataları not edin" gibi bir şey göstermeyi seviyorum. Yani, ayrı ayrı bu iki vaka tedavi:

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

Bunu nasıl yapabilirim? Yukarıdaki kodumla, flash messenger mesajları sadece –

+4

yenilendikten sonra gösterilir. Bu, FlashMessenger hakkında hoşuma gitmeyen şeylerden biridir; sadece kontrolör seviyesinde bulunur. Bana göre, bu flash messenger işi, görüş merkezli bir süreç olmalıdır. Bu yüzden büyük ölçüde [priorityMessenger] (http://emanaton.com/code/php/zendprioritymessenger) adında bir görüntü yardımcısı kullanıyorum. Mevcut FlashMessenger'ı kullanışlı hale getirmek için [Robert Basic'in FlashMessenger görüntü yardımcısına] bakabilirsiniz (https://github.com/robertbasic/phpplaneta/blob/master/library/PPN/View/Helper/FlashMessenger.php). Durumunuzda, hiçbir yenileme olmadan, formda hataları eklemenin daha kolay olduğunu düşünüyorum. –

İlgili konular