2015-08-20 45 views
0

我們有一個插件,它有一個postDispatch掛鉤,用於在使用ZF1開發的CMS上記錄使用情況統計信息。生成其中一條記錄後,我們需要將其唯一ID發送給視圖,以便能夠通過AJAX請求進行更新。無法在Zend Framework中設置來自postDispatch()的視圖變量

幾個帖子提供了不同的方法來設置來自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
  • 撐着在公共\的index.php
  • 登記的,其登記統計方法運行使用執行postDispatch功能

回答

1

當插件的postDispatch方法被調用時,視圖已經被渲染。 我有同樣的問題,所以我把代碼放到控制器的postDispatch中(你也可以創建一個擴展Zend_Controller_Action的基本控制器,覆蓋preDispatch和postDispatch,讓所有的控制器擴展基本控制器)。 不要使用

$this->render('script'); 

控制器內部,而是

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

如果需要的話。

這裏有一個答案link提供瞭解決方法。

相關問題