我有一个控制器插件postDispatch()
挂钩,并有我有一个$variable
。
如何通过这个变量的view
实例?
我试过Zend_Layout::getMvcInstance()->getView()
但它返回新的视图实例(而不是应用程序资源)。 用相同的$bootstrap->getResource('view')
我不想把它作为一个请求PARAM。
现在,作为一种变通方法我做使用Zend_Registry
。
但是,它是最好的方式?
我有一个控制器插件postDispatch()
挂钩,并有我有一个$variable
。
如何通过这个变量的view
实例?
我试过Zend_Layout::getMvcInstance()->getView()
但它返回新的视图实例(而不是应用程序资源)。 用相同的$bootstrap->getResource('view')
我不想把它作为一个请求PARAM。
现在,作为一种变通方法我做使用Zend_Registry
。
但是,它是最好的方式?
我一直在使用ViewRenderer会得到的观点,当我需要它。 这似乎是Zend类访问视图对象的最常见的方式。
因此,在控制器插件:
class App_Controller_Plugin_ViewSetup extends Zend_Controller_Plugin_Abstract {
public function postDispatch() {
$view = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->view;
echo $view->variable;
$view->variable = 'Hello, World';
}
}
在控制器:
class IndexController extends Zend_Controller_Action {
public function indexAction() {
$this->view->variable = 'Go away, World';
}
}
在视图脚本:
<?php echo $this->variable; ?>
输出是:走开,离开WorldGo世界
这似乎是问题是,视图脚本呈现执行postDispatch()方法被调用之前,因为这确实返回主视图对象。
在插件:
class App_Plugin_MyPlugin extends Zend_Controller_Plugin_Abstract{
public function preDispatch (Zend_Controller_Request_Abstract $request){
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$viewRenderer->setNeverRender(true);
}
public function postDispatch(Zend_Controller_Request_Abstract $request){
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$view = $viewRenderer->view;
$view->variable = 'new value';
$viewRenderer->render();
}
}
在控制器:
类的IndexController延伸化Zend_Controller_Action {
public function indexAction() {
$this->view->variable = 'value';
}
}
在视图脚本:
<?php echo $this->variable; ?>
输出是:新价值
class ZFExt_Controller_Plugin_Passvar extends Zend_Controller_Plugin_Abstract
{
public function postDispatch(Zend_Controller_Request_Abstract $request)
{
$view = Zend_Controller_Front::getInstance()
->getParam('bootstrap')
->getResource('view');
$view->variable = 'Hi there';
}
}
然后在视图脚本
<p><?php echo $this->variable; ?></p>