什么是布局,什么是观ZF? 当和其变量我应该使用,为什么?(What is Layout and

2019-09-19 05:59发布

我不明白何时使用Layout的变量以及何时使用View的变量来获取页面上页段。 这里是图片格式的Layout包教程( $this意味着View无处不实例):

为什么NavigationContentSidebar段得到的Layout变量?

$this->layout()->nav;

但是HeadTitleHeadScriptHeadStylesheet从View直线得到了什么?

$this->headTitle(); // I know that this is a placeholder view helper. 
                    // But this segment of the page logically belongs to Layout.
                    // and it has to be called smth like view->layout->placeholder 

为什么HeaderFooter是一些partial的方法View ,但没有Layout的属性?

$this->partial('header.phtml');

我试图改变他们,两种方式很好地工作:

echo $this->nav; // I assigned navigation segment script to the View and it works;

我试图分配Footer部分脚本的Layout ,它也可以工作:

$layout->footer = $footer;
echo $this->layout()->footer;  // it also works, it's displayed on the page

任何的方法可以应用到页面上的任何变量。 例如,在Navigation部分我有很多的变量来显示,我可以输出使用他们两种方式-一个变量Layout的财产,另一个SA View的属性。

那么,什么是使用它们正确的方式规则? 什么时候应该使用View的变量,并在Layout的人?

Answer 1:

我同意,这不是很清楚的文件,我不认为$this->layout()->nav在所有的解释。 有几点可能会有帮助:

  • $this->layout()实际上是对布局视图助手,它返回的当前实例调用Zend_Layout
  • Zend_Layout注册自己的占位符助手(与键'Zend_Layout的),默认情况下会创建在这个“内容”变量。
  • Zend_Layout类具有一个魔法__get()其代理任何成员变量调用到其注册占位符容器的方法。 因此调用$this->layout()->content是写作的另一种方式$this->placeholder('Zend_Layout')->content
  • Zend_Layout类也有一个魔法__set()该代理存储的数据占位符类方法。 所以$layout->footer = 'foo'是一样的调用$this->placeholder('Zend_Layout')->footer = 'foo' in the view

考虑到这一点:

为什么导航,内容和侧边栏段得到的布局变量?

因为这些存取存储在数据Zend_Layout的占位符。 你也可以使用$this->placeholder('Zend_Layout')->content

但是HeadTitle地,HeadScript,HeadStylesheet从View直线得到了什么?

这些视图助手。

为什么页眉和页脚是从视图的一些部分的方法,但没有布局的属性?

这是一种访问从其他模板内容的标准方式。

一般情况下,假设使用视图目的是访问数据的正确方法。 只有当你知道这个数据是在布局占位符使用的布局对象/帮手。

使用占位符在泛音的好处是,你可以访问和修改他们在几个不同的地方,包括在视图本身。 例如说你有存储在一个局部的边栏。 如果你要保存这个在Zend_Layout的占位符代替(例如在控制器插件),然后你可以覆盖这个在控制器的某些操作:

public function someAction()
{
    $this->view->layout()->sidebar = 'Some other sidebar content';
}

或在视图脚本本身:

<?php $this->layout()->sidebar = 'Content for this page only'; ?>


文章来源: What is Layout and what is View in ZF? When and whose variables should I use and why?