如何在Zend Framework插件中访问Layout对象?

时间:2009-10-25 03:49:25

标签: zend-framework plugins zend-layout

我正在尝试为控制器中的每个操作使用布局。例如,我在索引控制器中有三个操作。这些是indexAction,testAction和welcomeAction。我创建了三个xml布局文件。 index.xml,test.xml和welcome.xml。最后,我创建了一个插件。

class Moon_Layout_Append extends Zend_Controller_Plugin_Abstract{

 public function preDispatch($request){


  $layoutFile = APPLICATION_PATH."/Modules/".$request->module."/layout/".$request->action.".xml";

  $layout = new Zend_Config_Xml($layoutFile,'index');


 }

}

问题是...如何访问布局对象以设置我从xml读取的内容?

3 个答案:

答案 0 :(得分:4)

可以通过Controller Action帮助程序轻松访问布局功能。您应该能够使用以下行检索布局助手。

$layout= Zend_Controller_Action_HelperBroker::getStaticHelper('Layout');

如果您没有使用Zend_Application或其他方式初始化布局,您可能需要先调用以下内容:

Zend_Layout::startMvc();

答案 1 :(得分:1)

本教程准确说明您的需求,您可以创建一个用于导航的xml并在layout.phtml中显示它

http://www.goodcomputingtips.com/site/2010/09/part-5-adding-menus-using-zend_navigation-a-not-so-quick-quickstart-to-zend-framework/

一个简单的例子:

  

在你的引导程序中

protected function _initNavigation() {
$this->bootstrap("layout");
$layout = $this->getResource('layout');     
$view = $layout->getView();

$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml','nav');
$navigation = new Zend_Navigation($config);

$view->navigation($navigation); }
  

在你的layout.phtml中

<?php echo $this->navigation()->menu()->setMaxDepth(1); ?>

在链接中,您还有其他配置方法。

答案 2 :(得分:1)

对我来说只工作

$layout = Zend_Layout::getMvcInstance(); 

 $layout= Zend_Controller_Action_HelperBroker::getStaticHelper('Layout');

没用。