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
droslaw
post
Post #2





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

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


Chodzi mi o to, że właśnie ten sposób powoduje problemy. Przy podejściu podanym w dokumentacji zenda to znaczy w kontrolerze:
  1. $flashMessenger = $this->_helper->getHelper('FlashMessenger');
  2. $flashMessenger->addMessage('message');
  3. $this->view->messages = $flashMessenger->getMessages();

aplikacja zachowuje się zgodnie z moimi oczekiwaniami i przy odświerzeniu strony zobaczę kominikat 'message'.
Ale kiedy stosuję helpera o którym pisałem w pierwszym poście, nie mam tego komunikatu.
Dodałem Zend_Debug::dump w różne miejsca kodu w tym do Zend_Controller_Action_Helper_FlashMessenger. Okazuje się, że kiedy wywołuję:
  1. Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger');

po odświeżeniu strony (i dopiero po odświeżeniu) w przestrzeni nazw sesji w której FlashMessenger przechowuje komunikaty nie ma żadnych danych.
Tak się dzieje zawsze kiedy dodam
  1. Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger');

poza kontrolerem (np. w Bootstrapie, a w kontrolerze mogę stosować go do woli);
Poza tym kiedy dodam komunikat w konstruktorze FlashMessengera - layout wyświetla mi go tak jak tego chcę:
  1. class Zend_Controller_Action_Helper_FlashMessenger extends Zend_Controller_Action_Helper_Abstract implements IteratorAggregate, Countable
  2. {
  3. // ...
  4. public function __construct()
  5. {
  6. if (!self::$_session instanceof Zend_Session_Namespace) {
  7. self::$_session = new Zend_Session_Namespace($this->getName());
  8. //Wyświetli pustą tablicę jeśli stosuję Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger'); poza kontrolerem.
  9. Zend_Debug::dump(self::$_session->{$this->_namespace});
  10. foreach (self::$_session as $namespace => $messages) {
  11. self::$_messages[$namespace] = $messages;
  12. unset(self::$_session->{$namespace});
  13. }
  14. }
  15. // To się nie tyczy wiadomości dodawanych w tym konstruktorze, poniższy komunikat nie zginie i zostanie wyświetlony zawsze.
  16. $this->addMessage('komunikat ');
  17. }
  18. //...
  19. }

Zend: 1.11.11
PHP: 5.3.3-1ubuntu9.7
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: 15.10.2025 - 04:06