Zend Framework PHP中页面的基本流程

Zend Framework PHP中页面的基本流程,php,zend-framework,Php,Zend Framework,Zend如何使用scripts/index/index.phtml链接$this->layout()->内容 我想我没有理解页面应该如何粘在一起的基本原理。我看过zend站点上的快速入门,但它太简单了。视图中呈现的内容(PHTML文件)保存到内容变量中。可以在布局模板(另一个phtml文件-最好是layout.phtml)中回传。这就是‘最终产品’:)(或者你想详细说明你的问题。正如TomášFejfar解释的那样,$this->layout()->内容就是这样工作的。然而有趣的是,“内容”不仅

Zend如何使用scripts/index/index.phtml链接$this->layout()->内容


我想我没有理解页面应该如何粘在一起的基本原理。我看过zend站点上的快速入门,但它太简单了。

视图中呈现的内容(PHTML文件)保存到内容变量中。可以在布局模板(另一个phtml文件-最好是layout.phtml)中回传。这就是‘最终产品’:)(或者你想详细说明你的问题。

正如TomášFejfar解释的那样,
$this->layout()->内容就是这样工作的。然而有趣的是,“内容”不仅仅是版面中的一个变量。事实上,“content”是名为“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>
这就是我想补充的。当然,人们可能会想到其他场景,因为
$this->view->placeholder('Zend\u Layout')
Zend\u view\u Helper\u placeholder\u Container
的一个实例,所以您可以使用Zend\u Layout placeholder做其他事情

编辑: 键“content”是默认名称。您可以使用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()->内容

布局只不过是一个控制器插件,它在所有调度完成后创建自己的视图,这样它就可以获取最终的响应对象,并将其视图的内容属性设置为响应体


因此,基本上在index.phtml的缓冲区中,首先存储在响应对象中,然后layout接受此值并将其更改为自己的视图缓冲区。

content
是默认响应段的名称,所有这些都可供layout view助手使用。您还可以从响应对象本身获取它们。不幸的是,响应段是一个缺乏文档记录的功能ZF@Phil棕色的。我的意思是,“内容”是Zend_布局占位符中的一个键,Zend_布局使用它来存储操作的输出。您可以按如下方式轻松检查占位符的键:var_dump($this->placeholder('Zend_Layout')->getKeys());
protected function _initSetNewLayoutContentKey() {

    $layout = $this->bootstrap('layout')->getResource('layout');

    // instead of 'content' use 'viewoutput'
    $layout->setContentKey('viewoutput');
}