Доступ к action-helper внутри плагина front-controller

Я пытаюсь вызвать представление помощника из плагина (зарегистрированного в начальной загрузке). С любого контроллера я могу получить доступ без каких-либо проблем, но не из плагина. Ниже мой код. Любая помощь приветствуется. Спасибо. Мигель

class Plugins_security extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch (Zend_Controller_Request_Abstract $request)
    {
        $auth = Zend_Auth::getInstance();
        $moduleName = $request->getModuleName();
        if ($request->getModuleName() != "auth") 
        {
            $auth = Zend_Auth::getInstance();
            if (! $auth->hasIdentity()) 
            {
                $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper(
                'redirector');
                $flashMessenger = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessages');
                $flashMessenger->flashMessenger (array('message' => 'Sessao expirada', 'status' => 'error'));
                $redirector->gotoUrl('/auth/login/')->redirectAndExit();
            }
        }
    }
} 

Я получаю следующую ошибку. Фатальная ошибка: Неперехваченное исключение «Zend_Loader_PluginLoader_Exception» с сообщением «Плагин по имени «FlashMessages» не найдено в реестре; используемые пути: Zend_Controller_Action_Helper_: Zend/Controller/Action/Helper/' в /usr/local/zend/share/ZendFramework/library/Zend/Loader/PluginLoader.php:412 Трассировка стека: #0 /usr/local/zend/share /ZendFramework/library/Zend/Controller/Action/HelperBroker.php(366):


person user1960170    schedule 18.05.2013    source источник


Ответы (1)


Вы должны изменить

Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessages');

to

Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger');

Пример:

$flashMessenger = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger'); $flashMessenger->addMessage(array('error' => 'Сессия устарела'));

Надеюсь, это поможет вам. Не испытано

person rkj    schedule 18.05.2013
comment
FlashMessenger — это не имя моего помощника, это имя FlashMessages, и внутри этого класса я вызываю: Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger'); - person user1960170; 18.05.2013
comment
Затем вам нужно зарегистрировать свои вспомогательные сообщения FlashMessages в начальной загрузке приложения перед регистрацией Plugins_security. Чтобы он был доступен. - person rkj; 18.05.2013
comment
как вы регистрируете помощника представления. Я могу получить доступ к этому помощнику во всем приложении, но не в классе плагина. - person user1960170; 18.05.2013
comment
Во-первых, FlashMessenger — это не помощник представления, а помощник действия. мы регистрируем плагин, как эта защищенная функция _initPlugins() { //ВАШ ПОМОЩНИК ДЕЙСТВИЙ ДОЛЖЕН БЫТЬ ЗАРЕГИСТРИРОВАН ЗДЕСЬ ПЕРЕД $front = Zend_Controller_Front::getInstance(); $front-›registerPlugin(new Custom_Plugin_PluginName()); } - person rkj; 20.05.2013