Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework] FlashMessanger nie przechowuje komunikatów., Komunikaty są usuwane ze zmiennych sesji kiedy używam helpera widoku.
droslaw
post
Post #1





Grupa: Zarejestrowani
Postów: 98
Pomógł: 33
Dołączył: 10.05.2011
Skąd: Krak

Ostrzeżenie: (0%)
-----


Chcę wykorzystać w swoim projekcie FlashMessanger. Kierując się ściśle dokumentacją nie ma z tym problemu, wszystko działa. Niestety dokumentacja zakłada że będę w każdym kontrolerze akcji pobierać wiadomości i przypisywać je do zmiennej w widoku. Żeby uniknąć niepotrzebnej roboty utworzyłem helpera widoku, który sam się tym zajmuje i może być wywołany w layoucie.

  1. class Droslaw_View_Helper_Messenger extends Zend_View_Helper_Abstract
  2. {
  3. public function messenger()
  4. {
  5. $messages = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger')->getMessages();
  6. $text = '';
  7.  
  8. if(!empty($messages))
  9. {
  10. $text .= '<ul class="messages">';
  11. foreach($messages as $message)
  12. {
  13. $text .= '<li>'.$message.'</li>';
  14. }
  15.  
  16. $text .= '</ul>';
  17. }
  18.  
  19. return $text;
  20. }
  21. }


Problem powoduje ta linijka:
  1. Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger')->getMessages();

Po wywołaniu Zend_Controller_Action_HelperBroker::getStaticHelper wiadomości są usuwane z sesji. Kiedy pobieram wiadomości w kontrolerze i przypisuję do zmiennej widoku wszystko gra.

Pogrzebałem w źródłach FlashMessangera.
Jeśli dodam w jego kontrolerze linijkę:
  1. $this->addMessage('message');

wtedy wiadomość się wyświetla, w innym wypadku nie.
Byłoby miło gdyby ktoś znał rozwiązanie. Będę wdzięczny za pomoc.
Pozdrawiam.

Ten post edytował droslaw 29.01.2012, 19:30:54
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nid3
post
Post #2





Grupa: Zarejestrowani
Postów: 11
Pomógł: 3
Dołączył: 28.01.2012

Ostrzeżenie: (0%)
-----


Zrób tak:
Utwórz helper Message i dodaj go do listy helperów.:
  1. class Application_Helpers_Message extends Zend_View_Helper_Abstract {
  2.  
  3. public function message() {
  4. $html = '';
  5.  
  6. $flash_message = Zend_Controller_Action_HelperBroker::getStaticHelper('flashMessenger');
  7. if ($flash_message->hasMessages()) {
  8. $html = '<div class="message-box">';
  9. foreach ($flash_message->getMessages() as $message) {
  10.  
  11. $html .= $this->view->escape($message) ;
  12. }
  13. $html .='</div>';
  14. }
  15.  
  16.  
  17. return $html;
  18. }
  19.  
  20. }


Wywołuj go w pliku widoku. Ja np. mam go w layoucie
  1. <?php echo $this->message() ?>


Tworzysz gdzieś w parencie danej klasy, albo w samej klasie:
  1. $this->_redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector');
  2. $this->_message = Zend_Controller_Action_HelperBroker::getStaticHelper('flashMessenger');


i zaraz przed wywołaniem redirect (helperem redirector):
  1. $this->_message->addMessage('Zapisano zmiany');
  2. $this->_redirector->gotoSimple('gdzies');


Samo redirect też powinno działać.

Pozdrawiam.

Ten post edytował nid3 29.01.2012, 14:27:09
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 00:58