Как запустить действие после выполнения действия управления (во всех страницах)

StackOverflow https://stackoverflow.com/questions/5894743

Вопрос

У меня есть плагин для FrontController.

Это работает нормально для диспетчеровSerloodstartup Metod, но postdispatcher не может вызывать действие!

Что не так?!

Это мой плагин:

class Places_Controller_Plugin_ActionSetup extends Zend_Controller_Plugin_Abstract
{

public function dispatchLoopStartup( Zend_Controller_Request_Abstract $request)
    {
        $front = Zend_Controller_Front::getInstance();

        if (!$front->hasPlugin('Zend_Controller_Plugin_ActionStack')) {
                $actionStack = new Zend_Controller_Plugin_ActionStack();
                $front->registerPlugin($actionStack, 97);
            } else {
            $actionStack = $front->getPlugin('Zend_Controller_Plugin_ActionStack');
        }

            $menuAction = clone($request);
            $menuAction->setActionName('menu')->setControllerName('index');
            $actionStack->pushStack($menuAction);

    }


    public function postDispatch(Zend_Controller_Request_Abstract $request)
    {     $menuAction = clone($request);
        $menuAction->setActionName('toolbar')->setControllerName('index');
    }
}
.

Это мой код bootsrap:

$frontController->registerPlugin(new Places_Controller_Plugin_ActionSetup(), 98);
.

Если я должен использовать штабнуюпушку, номер для того, что номер полезен?

Это было полезно?

Решение

Первое. Это плохая практика. Вам нужно сделать 3 обходных пути (все плагины до и после отправки, контроллеры до и после отправки, ...) - Если возможно, я бы переключился на один плагин фронт-контроллера, который заполнит соответствующие переменные макета и будет использовать партиалы / помощники просмотра для отдают их.

Проблема с вашим кодом заключается в том, что в postDispatch () ваш запрос уже генерирует код кода, а это означает, что он больше не будет отправлен. Вариантом может быть создание запроса самостоятельно. А затем отправьте его в стек действий.

Также вы можете использовать методы стека действий isDispatched = true, которые создадут для вас запрос;) Вы можете получить текущие параметры, например, $this->actionstack($action, $controller, $module, $params) или sth. вот так (не уверен на 100% в названии метода).

ИЗМЕНИТЬ:

Если вы поместите рендеринг панели инструментов в макет, то проблем не будет. Вы можете назначить переменные виду, и они будут готовы в макете. У вас будет только сгенерированный код и все. Он всегда будет отображаться после визуализации всех действий, так как макет является последним визуализированным представлением. Просто убедитесь, что переменные вашей панели инструментов не конфликтуют с другими переменными (неплохо было бы исправить их чем-нибудь, скажем, $params = $frontController->getRequest()->getParams() и т. Д.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top