2015-08-20 11 views
0

У нас есть плагин с крюком postDispatch, используемым для записи статистики использования на CMS, разработанной с использованием ZF1. После создания одной из записей нам нужно получить уникальный идентификатор представления, чтобы иметь возможность обновлять его с помощью запросов AJAX.Невозможно установить переменные вида из postDispatch() в Zend Framework

Несколько сообщений предлагают различные методы для установки переменных вида из функции postDispatch, но ни одна из них не сработала для нас. Все они работают на тесто preDispatch.

Способ 1 от this answer работает на preDispatch, но не на postDispatch.

$view = Zend_Controller_Front::getInstance() 
    ->getParam('bootstrap') 
    ->getResource('view'); 
$view->recordUID = XXXXXX 

То же самое для method 2

$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); 
if (null === $viewRenderer->view) { 
    $viewRenderer->initView(); 
} 
$view = $viewRenderer->view; 
$view->recordUID = XXXXXX 

Другой пользователь предложил в другом месте (не могу найти ссылку сейчас), чтобы использовать Zend's registry, который также работал на preDispatch, но не на postDispatch

Zend_Registry::set('recordUID', 'XXXXXX'); 

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

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

  • Вид инициализируется в Bootstrap.php (required for method 1)
  • pluggin зарегистрирован в общественных местах \ index.php
  • метод, который регистрирует статистику выполняется с помощью функции postDispatch

ответ

1

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

$this->render('script'); 

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

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

при необходимости.

Здесь есть ответ link, который предлагает обход.

 Смежные вопросы

  • Нет связанных вопросов^_^