Zend_Layout入门指南(leaning zendframework翻译4)

Table of Contents

  • 介绍
  • 使用Zend_Layout
  • Zend_Layout结论

介绍

当使用Zend Framework MVC层创建web站点的时候,你的视图脚本通常是与请求动作(requested action)相关的HTML片段。比如,如果你有动作“/user/list”,你可以创建一个遍历用户并呈现一个无序表的视图脚本:

  1. <h2>Users</h2>
  2. <ul>
  3.     <?php if (!count($this->users)): ?>
  4.     <li>No users found</li>
  5.     <?php else: ?>
  6.     <?php foreach ($this->users as $user): ?>
  7.     <li>
  8.         <?php echo $this->escape($user->fullname) ?>
  9.         (<?php echo $this->escape($user->email) ?>)
  10.     </li>
  11.     <?php endforeach ?>
  12.     <?php endif ?>
  13. </ul>

因为这仅仅是一个HTML片段,它不是一个有效的页面;它缺少了DOCTYPE声明、开放的HTMLbody标签。所以,问题是,这些将在哪里被创建?

Zend Framework的早期版本中,开发者经常创建含有这些人工标记的“header”和“footer”视图脚本,然后在每个视图脚本中渲染他们。虽然这套方法能够工作,但它也为以后重构造成困难,或者通过调用多个行为去建立复合的内容

两步视图设计模式回答了许多现在的问题。在这个模式里,“application”视图首先被创建,然后将其中注入“page”视图,随后“page”视图提交给客户端。Page视图可看作是你的全站模板或者布局,可以在各个页面之间使用共同的元素

Zend Framework中,Zend_Layout实现了两步视图模式

使用 Zend_Layout

Zend_Layout基本用法相当琐碎的(trivial)。假设你已经在使用Zend_Application,你能够简单的提供一些配置选项并创建一个布局视图脚本。

Layout 配置

布局存放的推荐位置是在你应用程序的“layout/script/”子目录中

  1. application
  2. |-- Bootstrap.php
  3. |-- configs
  4. |   `-- application.ini
  5. |-- controllers
  6. |-- layouts
  7. |   `-- scripts
  8. |       |-- layout.phtml

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

  1. resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
  2. resources.layout.layout = "layout"

第一行显示到哪里去寻找布局脚本;第二行指定使用的布局名称,它是减去视图脚本的扩展名(默认情况下假设是“.phtml”)得到的

创建布局脚本

既然你已经配置到位,那么你需要去创建你的布局脚本。首先,确信你已经创建了"application/layouts/scripts" 目录;然后,打开编辑器,并且为你的布局创建标记。布局脚本是简单的略有一些不同的视图脚本。

  1. <html>
  2. <head>
  3.     <title>My Site</title>
  4. </head>
  5. <body>
  6.     <?php echo $this->layout()->content ?>
  7. </body>
  8. </html>

在这个例子中,你将会注意到layout()视图助手的调用。当你注册Zend_Layout资源,你还会获得动作和允许你访问Zend_Layout实例的视图助手;然后你能够进行调用布局对象的操作。在这个例子中,我们要得到一个命名变量:$content,echo它。默认情况下,$content变量在应用程序视图脚本渲染中被填充。除此之外,在视图脚本中你要做的任何事情是完全有效的——调用你想调用得任何助手或者视图方法

此时,你已经有了一个工作的布局脚本,你的应用程序已知道它的位置并且去渲染它

访问布局对象

有时,你可能需要直接访问布局对象,有三种方法可以做到这一点:

  • 在视图脚本中:使用layout()视图助手,其返回用前端控制器注册的Zend_Layout实例
    1. <?php $layout = $this->layout(); ?>

因为它返回布局实例,所以你也能够简单的在其上调用方法,而不是将它赋给一个变量。

  • 在动作控制器里:使用layout()动作助手,它的行为就像视图助手
    1. // Calling helper as a method of the helper broker:
    2. $layout = $this->_helper->layout();
    3.  
    4. // Or, more verbosely:
    5. $helper = $this->_helper->getHelper('Layout');
    6. $layout = $helper->getLayoutInstance();

如同视图助手,因为动作助手返回布局实例,所以你能够也简单的在其上调用方法,而不是将它付给一个变量

  • 其他(elsewhere):使用静态方法getMvcInstance()。这将返回被引导资源(bootstrap resource)注册的布局实例。
    1. $layout = Zend_Layout::getMvcInstance();
  • 通过bootstrap:得到布局资源,它将是Zend_Layout的实例
    1. $layout = $bootstrap->getResource('Layout');

你随时随地都可以访问引导对象(bootstrap object),这个方法由于使用静待的getMvcInstance()方法。

其他操作

在大多数情况下,上面的设置和布局脚本(带有修改(with modifications))将得到你所需要的。然而,一些其他存在的功能你将迟早可能使用。在所有下面的例子中,你为了要得到布局对象而使用上面列出上的其中一个方法

  • 设置布局变量Zend_Layout保持它自己的你能存取的指定布局(layout-specific)视图变量注册表(Setting layout variables. Zend_Layout keeps its own registry of layout-specific view variables that you can access);在初始布局脚本实例中指出的$content键是一个那样的例子。你能指定和得到这些使用正常属性的入口(access),或者通过assign()方法。
    1. // Setting content:
    2. $layout->somekey = "foo"
    3.  
    4. // Echoing that same content:
    5. echo $layout->somekey; // 'foo'
    6.  
    7. // Using the assign() method:
    8. $layout->assign('someotherkey', 'bar');
    9.  
    10. // Access to assign()'d variables remains the same:
    11. echo $layout->someotherkey; // 'bar'
  • disableLayout()。有时,你可能想去禁用布局;比如,当应答一个Ajax请求,或者提供一个RESTful资源的代表(representation of a resource)。在这些例子中,你可以在你的布局对象中调用disableLayout() 方法。
    1. $layout->disableLayout();

与这个方法相对的,当然是enbleLayout(),它能在任何时候被调用为请求的动作重新启用布局。

  • 选择一个备用布局:如果为你的站点或应用程序有多个布局。你能够在任何时候通过简单调用setLayout()方法选择使用的布局。通过指定不带文件前缀的布局脚本的名字来调用它
    1. // Use the layout script "alternate.phtml":
    2. $layout->setLayout('alternate');

The layout script should reside in the $layoutPath directory specified in your configuration. Zend_Layout will then use this new layout when rendering.

这个布局脚本应该在你的配置里指定的$layoutPath目录。Zend_Layout然后将在渲染的时候使用这个新布局。

Zend_Layout: 结论

Zend_Layout是一个围绕Zend_View非常简单的包装(wrapper),它立即提供给你你两步视图的益处,给你创建一个可以将你的应用程序注入的全站范围设计的灵活性

如果你密切关注这些例子,你可能会提出(come away with)功能相对不足的想法:怎样改变你的页面title,怎样注入一个可选的脚本标签,或者怎样创建一个可选的边栏(sidebar)?这些问题是解决了(are addressed with)“复合视图(Composite View)”的概念——这些问题还是这个教程中下一章的主题,它包含了视图“占位符”。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值