哪个是获得Zend_View的更好方法

时间:2011-09-20 23:16:42

标签: zend-framework zend-view zend-layout

我正在开发一个基于Zend Framework的应用程序,在控制器插件中,我可以使用以下方法获取Zend_View对象,有人请告诉我哪种方法更好,为什么?

$view = Zend_Layout::getMvcInstance()->getView();

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

$view = $viewRenderer->view;

4 个答案:

答案 0 :(得分:2)

由于Zend_Layout::getView()方法如下所示:

public function getView()
{
    if (null === $this->_view) {
        require_once 'Zend/Controller/Action/HelperBroker.php';
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
        if (null === $viewRenderer->view) {
            $viewRenderer->initView();
        }
        $this->setView($viewRenderer->view);
    }
    return $this->_view;
}

...我更愿意使用它;)

答案 1 :(得分:1)

最好从viewRenderer中取出它,因为那时你肯定会永远得到它。您可能没有在某些上下文中使用Layout,然后您将无法通过布局获得视图。

所以,要保存一边,将它从viewRenderer拉出来,无论如何它都更直接,因此也更快。

答案 2 :(得分:0)

Zend_Controller_Action_Helper定义getActionController(),您可以使用该$view = $this->getActionController()->view; 获取公共视图。也许插件有相同的方法。虽然我不喜欢通过公共财产访问它,但我认为最好通过助手的控制器本身而不是布局。

{{1}}

答案 3 :(得分:0)

如果你从布局中提取视图,那么两个是不同的东西,而返回视图实例基本上可以帮助你访问layout.phtml中的视图变量,另一方面从viewRender动作帮助器获取视图将帮助你访问视图变量在你的action.phtml中(查看特定的控制器动作)。