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/

10-15 18:29