从postDispatch()传递变量到Zend Framework中的视图实例

时间:2010-03-27 22:15:50

标签: php zend-framework

我有一个带postDispatch()挂钩的控制器插件,我有一个$variable

如何将此变量传递给view实例?

我尝试了Zend_Layout::getMvcInstance()->getView(),但这会返回新的视图实例(不是应用程序资源)。与$bootstrap->getResource('view')相同。

我不想将其作为请求参数传递。
现在,作为解决方法,我使用Zend_Registry

但是,这是最好的方式吗?

3 个答案:

答案 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>