У нас есть плагин, который имеет хук postDispatch, используемый для записи статистики использования на CMS, разработанной с использованием ZF1. После того, как одна из записей сгенерирована, нам нужно получить ее уникальный идентификатор для представления, чтобы иметь возможность обновлять ее с помощью запросов AJAX.
Несколько постов предлагают различные методы для установки переменных представления из функции postDispatch, но ни один из них не работал для нас. Все они работают на тесте preDispatch.
Способ 1 из этот ответ работает на preDispatch, но не на postDispatch.
$view = Zend_Controller_Front::getInstance()
->getParam('bootstrap')
->getResource('view');
$view->recordUID = XXXXXX
То же самое для способ 2
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
if (null === $viewRenderer->view) {
$viewRenderer->initView();
}
$view = $viewRenderer->view;
$view->recordUID = XXXXXX
Другой пользователь предложил в другом месте (не может найти ссылку сейчас) использовать Реестр Zend который также работал на preDispatch, но не на postDispatch
Zend_Registry::set('recordUID', 'XXXXXX');
Казалось бы, объект представления теряется после отправки запроса.
Дополнительная информация
Представление уже было отображено при вызове метода плагина postDispatch.
У меня была та же проблема, поэтому я поместил код в postDispatch контроллера (вы также можете создать базовый контроллер, который расширяет Zend_Controller_Action, переопределить там preDispatch и postDispatch и позволить всем контроллерам расширять базовый контроллер).
Не использовать
$this->render('script');
внутри контроллера, а точнее
$this->_helper->viewRenderer('script');
если нужно.
Здесь есть ответ ссылка на сайт это предлагает обходной путь.
Других решений пока нет …