Zend如何将$ this-> layout()-> content与scripts/index/index.phtml链接?
我认为我无法理解页面应该如何组合在一起的基础知识。我已经看过zend网站上的快速入门,但这太简单了。
最佳答案
正如TomášFejfar所解释的那样,这就是$this->layout()->content
的工作原理。然而有趣的是,“内容”不仅仅是布局中的变量。实际上,“内容”是View占位符“Zend_Layout”中的键。因此,以下代码段与您的layout.phtml中的echo $this->layout()->content
等效:
$placeHolder = Zend_View_Helper_Placeholder_Registry::getRegistry()->getContainer('Zend_Layout');
echo $placeHolder['content'];
// or
echo $this->placeholder('Zend_Layout');
// or
echo $this->placeholder('Zend_Layout')->content;
这可能非常有用。我的意思是,您可以在layout.phtml中定义一些位置,这些位置将显示“Zend_Layout”占位符中自定义键的值。例如,假设您想拥有一个layout.phtml,并且希望能够在页脚中修改文本。您可以通过定义layout.phtml来完成此操作,该文件将在页脚中包含以下内容:
<div id="footer">
<?php echo $this->layout()->myFooterText; ?>
</div>
您可以在此页脚中设置默认值,例如您的Bootstrap.php。但是,如果您愿意,可以按以下方式在操作中修改此文本;
$this->view->placeholder('Zend_Layout')->myFooterText = 'Some text only for this action';
这就是我要添加的内容。当然,人们可能会想到其他场景,因为
$this->view->placeholder('Zend_Layout')
是Zend_View_Helper_Placeholder_Container
的实例,因此您可以使用Zend_Layout占位符执行其他操作。编辑:
键“内容”是默认名称。您可以使用Zend_Layout的setContentKey方法将其更改为其他内容,例如:
protected function _initSetNewLayoutContentKey() {
$layout = $this->bootstrap('layout')->getResource('layout');
// instead of 'content' use 'viewoutput'
$layout->setContentKey('viewoutput');
}
进行此更改后,在layout.phtml中,您将使用
echo $this->layout()->viewoutput;
而不是echo $this->layout()->content;
。关于php - Zend Framework PHP中的页面基本流程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5046945/