2011-09-20 35 views
1

我正在处理基于Zend Framework的应用程序,并且在控制器插件中,我可以通过以下方法获取Zend_View对象,有人请告诉我哪种方法更好,为什么?哪个更好的方法来获取Zend_View

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

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

$view = $viewRenderer->view; 
+0

取决于上下文。 – NiematojakTomasz

+0

如果您可以在布局方式更好并且应该使用viewrendrer时共享,我将不胜感激。现在我正在写一个控制器插件,我需要访问查看对象,所以更适合哪种方法。 – Bryan

+0

这是两件不同的事情。 viewRenderer负责确定目标视图脚本和执行后的自动渲染。 Zend_Layout通常用于布局脚本。 如果你使用的是MVC,你应该可以使用'$ this-> view'来访问控制器的视图。 – NiematojakTomasz

回答

1

最好将它从viewRenderer中拉出来,因为那样你就可以永远得到它。您可能不会在某些情况下使用布局,然后您将无法通过布局获取视图。

所以,为了节省成本,将它从viewRenderer中拉出来,反正它更直接,因此速度也更快。

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; 
} 

...我宁愿使用它;)

+0

当不使用布局时会发生什么? – markus

0

Zend_Controller_Action_Helper限定getActionController()与你可以获得公众的看法。也许插件有相同的方法。虽然我不喜欢通过公共财产访问它,但我相信最好通过帮助者的控制器本身而不是布局。

$view = $this->getActionController()->view; 
+0

感谢大卫,但我不是在谈论Zend_Controller_Action_helper_Abstract,我正在谈论Zend_Controller_Plugin_Abstract,并且那里我们只有访问响应(Zend_Controller_Response_Http)和请求(Zend_Controller_Request_Http)对象 – Bryan

+0

是的,我没有在我面前的代码仔细检查。我想控制器插件不是设计用来从控制器本身? –

0

都是如果从布局比返回视图实例拉图两个不同的东西基本上都会帮助你访问视图变量您layout.phtml内,而另一方面采取从viewRender动作助手视图将帮助你访问action.phtml中的视图变量(查看特定的控制器操作)。

+0

嗯,所以你说如果我指定一个变量来查看布局,变量将只能在layout.phtml中访问,而从viewRenderer分配给view的变量仅在action.phtml中可用。我认为这两个脚本都有变量,但不确定。检查... – Bryan

相关问题