我有一个带postDispatch()
挂钩的控制器插件,我有一个$variable
。
如何将此变量传递给view
实例?
我尝试了Zend_Layout::getMvcInstance()->getView()
,但这会返回新的视图实例(不是应用程序资源)。与$bootstrap->getResource('view')
相同。
我不想将其作为请求参数传递。
现在,作为解决方法,我使用Zend_Registry
。
但是,这是最好的方式吗?
答案 0 :(得分:3)
:
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; ?>
输出为:新值
答案 1 :(得分:2)
我一直在使用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 away,World
似乎问题是视图脚本在调用postDispatch()方法之前呈现,因为此 返回主视图对象。
答案 2 :(得分:0)
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>