gpt4 book ai didi

php - ZF 中的 Layout 和 View 是什么?我应该何时使用谁的变量,为什么?

转载 作者:行者123 更新时间:2023-12-04 05:39:51 24 4
gpt4 key购买 nike

我不明白什么时候使用 Layout的变量以及何时使用 View的变量来获取页面上的页面段。这是他们Layout的图片包教程( $this 表示 View 实例无处不在):
enter image description here

为什么Navigation , ContentSidebar分割为 Layout变量?

$this->layout()->nav;

但是 HeadTitle , HeadScript , HeadStylesheet是直接从 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的属性(property),另一个sa View的属性(property)。

那么正确使用它们的规则是什么?我什么时候应该使用 View的变量和时间 Layout的?

最佳答案

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

  • $this->layout()实际上是对布局 View 助手的调用,它返回 Zend_Layout 的当前实例.
  • Zend_Layout注册它自己的占位符助手(使用键'Zend_Layout'),并默认在其中创建一个'content'变量。
  • Zend_Layout类(class)有魔力__get()代理任何成员变量调用其注册的占位符容器的方法。所以调用$this->layout()->content是另一种写法$this->placeholder('Zend_Layout')->content
  • Zend_Layout类也有魔力__set()将存储的数据代理到占位符类的方法。所以$layout->footer = 'foo'与调用 $this->placeholder('Zend_Layout')->footer = 'foo' in the view 相同

  • 考虑到这一点:

    Why Navigation, Content and Sidebar segments are got as Layout variables?



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

    But HeadTitle, HeadScript, HeadStylesheet are got straightly from View?



    这些是 View 助手。

    And why Header and Footer are from some partial method of the View but not Layout's properties?



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

    一般来说,假设使用 View 对象是访问数据的正确方法。仅当您知道数据在布局占位符中时才使用布局对象/助手。

    使用占位符而不是部分的优点是您可以在几个不同的地方访问和修改它们,包括在 View 本身中。例如,假设您有一个侧边栏,它存储在部分中。如果您将其存储在 Zend_Layout 占位符中(例如在 Controller 插件中),您可以为 Controller 中的某些操作覆盖它:
    public function someAction()
    {
    $this->view->layout()->sidebar = 'Some other sidebar content';
    }

    或在 View 脚本本身中:
    <?php $this->layout()->sidebar = 'Content for this page only'; ?>

    关于php - ZF 中的 Layout 和 View 是什么?我应该何时使用谁的变量,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11396521/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com