Не удается установить переменные представления из postDispatch () в Zend Framework

У нас есть плагин, который имеет хук 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');

Казалось бы, объект представления теряется после отправки запроса.

Дополнительная информация

  • Представление инициализируется в Bootstrap.php (требуется для метода 1)
  • Плагин зарегистрирован в public \ index.php
  • Метод, который регистрирует статистику, выполняется с использованием функции postDispatch.

0

Решение

Представление уже было отображено при вызове метода плагина postDispatch.
У меня была та же проблема, поэтому я поместил код в postDispatch контроллера (вы также можете создать базовый контроллер, который расширяет Zend_Controller_Action, переопределить там preDispatch и postDispatch и позволить всем контроллерам расширять базовый контроллер).
Не использовать

$this->render('script');

внутри контроллера, а точнее

$this->_helper->viewRenderer('script');

если нужно.

Здесь есть ответ ссылка на сайт это предлагает обходной путь.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]