开始使用 Zend_Layout

介绍

当使用 Zend Framework MVC 层来建设一个网站的时候,你的视图脚本将会典型的只是和请求动作相关的 HTML 片断。例如,如果你有 /user/list 这个动作,你可能创建一个穷尽用户并呈现一个没有号码的列表的视图脚本:

由于这只是 HTML 的一个片断,它不是一个合法的页面;它没有 DOCTYPE 声明,以及 HTML 和 BODY 的开始标签。所以,现在的问题是,这些元素将会在哪里被创造?

在 Zend Framework 的早期版本中,开发者通常创建拥有这些工件的 header 和 footer 视图脚本,然后他们会在每一个视图脚本中调用这两个脚本。当使用这种方法的时候,它会使以后的重构,或者通过调用多种行动来建造复合内容变得困难。

Tow Step View 设计模式回答了这些问题。在这个模式中,应用程序的视图将首先被创建,然后注入到页面视图,页面视图然后将呈现给客户。页面视图可以被认作你整个网站的模板,拥有许多被大量页面使用的通用元素。

在 Zend Framework 中,Zend_Layout 应用了 TwoStep View 模式。

使用 Zend_Layout

Zend_Layout 的基本用法有些繁琐。假设你已经在使用 Zend_Application,你只要简单的提供一些配置选项然后创建一个模板视图脚本。

模板配置

模板的默认位置在你的应用程序中的 layouts/scripts/ 子目录。

application
|-- Bootstrap.php
|-- configs
| `-- application.ini
|-- controllers
|-- layouts
| `-- scripts
| |-- layout.phtml

为了初始化 Zend_Layout,把以下内容添加到你的配置文件中(application/configs/application.ini):

第一行指示了到哪里查找模板脚本,第二行给出模板将要使用的名字,去掉了视图脚本的扩展名(默认是被假设为 .phtml)。

创建一个模板脚本

现在你已经把配置放在了合适的地方,你需要创建你的模板脚本。首先,确保你已经创建了 application/layouts/scripts 目录,然后,打开一个编辑器,然后为你的模板创建标签。模板脚本是简单的视图脚本,稍微有一点不同。

在上面的例子中,你会注意到调用了一个 layout() 的视图帮助器。当你注册 Zend_Layout 资源的时候,你同时获取了一个行动和视图帮助器,以让你访问 Zend_Layout 实例;你然后可以对模板对象进行操作。在这个例子中,我们在检索一个已经命名的变量,$content,然后输出它。默认的,$content 变量被应用程序的视图脚本呈现内容填充。除此以外,在一个视图脚本里你一般做的任何事情都是十分合理的(在模板脚本中做类似的事情)——调用你想使用的任何帮助器或者视图方法。

至此,你有了一个运行了的模板脚本,你的应用程序被告知它(模板脚本)的位置以及知道呈现它。

访问模板对象

有时,你可能需要直接访问模板对象。有三种方法让你达到这个目的:

在视图脚本内:使用 layout() 视图帮助器,它将返回在前端控制器插件上注册的 Zend_Layout 实例。

由于它返回模板的实例,你也可以简单的调用它的方法,而不是把它赋值给一个变量。

在行为控制器内:使用 layout() 行为帮助器,这将如同视图帮助器。

如同视图帮助器,由于行为帮助器返回模板的实例,你也可以简单的调用它的方法,而不必把它赋值给一个变量。

其它地方:使用静态方法 getMvcInstance()。这将返回被 bootstrap 资源注册的模板实例。

通过 bootstrap:检索模板资源,就是 Zend_Layout 的实例。

在你拥有访问 bootstrap 对象权限的任何地方,这个方法比使用静态 getMvcInstance() 方法更好。

其它的操作

在大多数个案中,以上的配置和模板脚本(带修饰)将使你得到你所需要的。然而,仍然有一些其它的功能,你迟早会用到它们。在下面的所有例子中,你可能使用上述的方法中的一种,来检索模板对象。

设置模板变量。Zend_Layout 保持了它自己的你可以访问的关于模板相关的视图变量的注册表;在初始化模板脚本 样本中的 $content 就是一个例子。你可以通过普通的属性访问来分配和检索这些变量,或者通过 assign() 方法。

disableLayout()。偶而,你可能想关闭模板;比如,当响应一个 Ajax 请求的时候,或者提供一个资源的可 RESTful 的呈现。在这些个案中,你可以调用在你的模板对象上的 disableLayout() 方法。

与之相反的方法是,当然,enableLayout(),可以在任何时候调用来再次响应行为要求重新激活模板。

选择另外的模板:如果你为网站或者应用程序准备了许多套模板,你可以通过简单的调用 setLayout() 方法来在任何时间选择要使用的模板。通过指定模板脚本去掉文件后缀的文件名来调用它。

模板脚本应该放置在你的配置文件中指定的 $layoutPath 路径中。Zend_Layout 将会使用这个新的模板。

结论

Zend_Layout 是一个对 Zend_View 的十分简单的包装,它提供了立即 Two Step View 的好处,给你可伸缩性来创建一个可以把你的应用程序的内容注射进入的全网站设计。

如果你仔细的观察这些例子,然而,你可能会觉得它的功能相对有限:你应该如何改变页面的标题,注入一个可选脚本标签,或者甚至是创建一个可选的横幅?这些问题和 Composite view 这个概念相关——而且是本教程下一章的目标,有关视图占位符。

 


原文见 http://framework.zend.com/manual/en/learning.layout.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值