2011-02-18 46 views
5

Zend如何链接$ this-> layout() - > content with scripts/index/index.phtml?Zend Framework中页面的基本流程PHP

我想我没有理解页面应该如何粘在一起的基本知识。我已经看到了zend网站的快速入门,但它太简单了。

回答

1

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

4

正如TomášFejfar解释说那是$this->layout()->content的工作原理。然而有趣的是,'内容'不仅仅是布局中的一个变量。实际上,'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,并且你希望能够修改你的页脚中的文本。

<div id="footer"> 
<?php echo $this->layout()->myFooterText; ?> 
</div> 

,你可以设置此页脚中的默认值例如:你可以通过定义layout.phtml其中将包含在页脚下面这样做你的Bootstrap.php。但是,如果您想要,您可以按照以下方式在您的操作中修改此文本;

$this->view->placeholder('Zend_Layout')->myFooterText = 'Some text only for this action'; 

这就是我想补充的。当然可以考虑其他scenerios,因为$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;改变它的东西。

+0

`content`是默认响应段的名称,所有这些都可用于布局视图助手。您也可以从响应对象本身获取它们。不幸的是,响应部分是ZF – Phil 2011-02-19 03:15:21

0

布局不过是一个控制器插件,它在完成所有分派后创建自己的视图,以便它可以接受最终响应对象并将其视图的内容属性设置为响应主体。

因此,基本上在你的情况下index.phtml的缓冲区,首先存储在响应对象,然后布局采取这个值,并改变它自己的视图缓冲区。