проблема Zend Framework с FlashMessenger

Я использую помощник FlashMessenger для установки сообщений, но не могу получить сообщения с помощью метода getMessages(). он возвращает ноль. вот мой пример кода:

<?php
class Admin_TestController extends Zend_Controller_Action
{
    protected $_flashMessenger = null;

    public function init()
    {
        $this->_flashMessenger = $this->_helper->getHelper('FlashMessenger');
        $this->initView();
    }

    public function myAction()
    {
        $this->_flashMessenger->addMessage('test message');

        $this->_helper->Redirector("mynextrequest");
    }

    public function mynextrequestAction()
    {
        zend_debug::dump($this->_flashMessenger->getMessages());
        $this->render();
    }
}

person rahim asgari    schedule 06.07.2009    source источник
comment
Я думаю, zend_debug с маленькими заглавными буквами не проблема, или нет? :)   -  person Tomáš Fejfar    schedule 09.07.2009


Ответы (5)


Чтобы решить эту проблему, вам нужно отредактировать библиотеку/Zend/Controller/Action/Helper/FlashMessenger.php

найти строку:
 self::$_session->{$this->_namespace}[] = $message;

и изменить ее на
//self::$_session->{$this->_namespace}[] = $message;
$sessionMessages = self::$_session->{$this->_namespace};
$sessionMessages[] = $message;
self::$_session->{$this->_namespace} = $sessionMessages;

Эта проблема затрагивает только php 5.2, поэтому они решили не исправлять ее, а вместо этого предложили обновить версию PHP.

person tsergium    schedule 30.03.2011

я обновляюсь с php 5.2.0 до 5.2.9, и проблема решена.

person rahim asgari    schedule 10.07.2009

Помимо проблем с регистрацией заглавных букв в имени функции/класса, убедитесь, что ваш Zend_Session настроен, запущен и имеет работающий метод хранения. Он будет использовать ваш метод хранения сеанса, полученный из new Zend_Session_Namespace('FlashMessenger')

person Justin    schedule 09.07.2009

Существуют версии PHP 5.2.x, в которых есть проблема с

// Zend_Controller_Action_Helper_FlashMessenger::addMessage() (строка 143)
self::$_session->{$this->_namespace}[] = $message;

Обновление PHP было бы решением (как и вы) или заменой приведенной выше строки следующим кодом:

$messages = self::$_session->{$this->_namespace};

$сообщения[] = $сообщение;

self::$_session->{$this->_namespace} = $messages;

person Community    schedule 16.07.2009

У меня возникла проблема из-за двух вызовов ajax, которые использовали flashMessenger и завершали загрузку в случайном порядке. Таким образом, первый вызов ajax иногда загружался первым и, таким образом, использовал сообщения и не оставлял для второго; и я ожидал сообщений об ошибках во втором вызове ajax и задавался вопросом, почему они показывают примерно 50% случаев.

person obotezat    schedule 22.06.2010