Chodzi mi o to, że właśnie ten sposób powoduje problemy. Przy podejściu podanym w dokumentacji zenda to znaczy w kontrolerze:
$flashMessenger = $this->_helper->getHelper('FlashMessenger');
$flashMessenger->addMessage('message');
$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ę:
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
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ę:
class Zend_Controller_Action_Helper_FlashMessenger extends Zend_Controller_Action_Helper_Abstract implements IteratorAggregate, Countable
{
// ...
public function __construct()
{
if (!self::$_session instanceof Zend_Session_Namespace) {
self::$_session = new Zend_Session_Namespace($this->getName());
//Wyświetli pustą tablicę jeśli stosuję Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger'); poza kontrolerem.
Zend_Debug::dump(self::$_session->{$this->_namespace});
foreach (self::$_session as $namespace => $messages) {
self::$_messages[$namespace] = $messages;
unset(self::$_session->{$namespace}); }
}
// To się nie tyczy wiadomości dodawanych w tym konstruktorze, poniższy komunikat nie zginie i zostanie wyświetlony zawsze.
$this->addMessage('komunikat ');
}
//...
}
Zend: 1.11.11
PHP: 5.3.3-1ubuntu9.7