| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <sect1 id="zend.view.introduction">
- <title>简介</title>
- <para>
- <code>Zend_View</code>是用来在MVC模式中处理View(视图)部份的一个类。也就是说它用来使视图部份的代码与Model及controller部分分离。它提供了helper,output filter,variable escaping等几个功能组件。
- </para>
- <para>
- <code>Zend_View</code>使用PHP本身作为你的模板,或者你也可以建立其它模板引擎的实例,并用你的view代码来对其进行操作。
- </para>
- <para>
- 使用<code>Zend_View</code>主要有两步: 1. 你的Controller建立一个<code>Zend_View</code>实例,并将需要的变量传递给它; 2. Controller告诉<code>Zend_View</code>解析一个特定的视图,生成View输出的内容。
- </para>
- <sect2 id="zend.view.introduction.controller">
- <title>控制器脚本</title>
- <para>
- 下面是一个简单的例子。假设你有一个书籍清单,想把它打印出来。控制器代码可能看起来是这样的:
- </para>
- <programlisting role="php"><![CDATA[<?php
- //使用一个模型来获取书籍作者和标题相关数据。
- $data = array(
- array(
- 'author' => 'Hernando de Soto',
- 'title' => 'The Mystery of Capitalism'
- ),
- array(
- 'author' => 'Henry Hazlitt',
- 'title' => 'Economics in One Lesson'
- ),
- array(
- 'author' => 'Milton Friedman',
- 'title' => 'Free to Choose'
- )
- );
- //传递数据给Zend_View类的实例
- Zend_Loader::loadClass('Zend_View');
- $view = new Zend_View();
- $view->books = $data;
- //解析一段View代码"booklist.php"来显示数据
- echo $view->render('booklist.php');]]>
- </programlisting>
- </sect2>
- <sect2 id="zend.view.introduction.view">
- <title>视图脚本</title>
- <para>
- 现在我们看看相关的视图代码"booklist.php"。这是一段普通的代码,但是有一点特别:它是在<code>Zend_View</code>实例的内部运行的,所以$this指向的是<code>Zend_View</code>实例和类方法。(controller传递给<code>Zend_View</code>实例的变量是public的)。一段非常基本的视图代码看起来是这样的:
- </para>
- <programlisting role="php"><![CDATA[<?php if ($this->books): ?>
- <!-- 包含几本书信息的HTML表格. -->
- <table>
- <tr>
- <th>Author</th>
- <th>Title</th>
- </tr>
- <?php foreach ($this->books as $key => $val): ?>
- <tr>
- <td><?php echo $this->escape($val['author']) ?></td>
- <td><?php echo $this->escape($val['title']) ?></td>
- </tr>
- <?php endforeach; ?>
- </table>
- <?php else: ?>
- <p>There are no books to display.</p>
- <?php endif; ?>]]>
- </programlisting>
- <para>
- 注意我们使用escape()来转义输出。
- </para>
- </sect2>
- <sect2 id="zend.view.introduction.options">
- <title>选项</title>
- <para>
- <code>Zend_View</code>有若干选项来配置视图脚本的运行。
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <code>basePath</code>: 指示一个基本路径,可以在下面设置script、 helper 和 filter 路径。目录结构如下:
- </para>
- <programlisting role="php"><![CDATA[
- base/path/
- helpers/
- filters/
- scripts/]]>
- </programlisting>
- <para>
- 可以通过 <code>setBasePath()</code>、<code>addBasePath()</code>、或 <code>basePath</code>设置给构造器。
- </para>
- </listitem>
- <listitem><para>
- <code>encoding</code>: 指定 <code>htmlentities()</code>、<code>htmlspecialchars()</code>和其它操作所采用的字符集,缺省为 ISO-8859-1 (latin1)。也可以通过<code>setEncoding()</code> 或 <code>encoding</code> 设置给构造器。
- </para></listitem>
- <listitem><para>
- <code>escape</code>: 指定<code>escape()</code>所使用的回调函数(callback)。也可以通过<code>setEscape()</code>或<code>escape</code>设置给构造器。
- </para></listitem>
- <listitem><para>
- <code>filter</code>: 指示在解析视图脚本后使用的过滤器。可以通过<code>setFilter()</code>、<code>addFilter()</code>或者<code>filter</code>设置给构造器。
- </para></listitem>
- <listitem><para>
- <code>strictVars</code>: 指定某些未初始化的视图变量被访问时,<code>Zend_View</code>必须发出通知和警告。可以通过调用<code>strictVars(true)</code> 或传递<code>strictVars</code>给构造器来设置。
- </para></listitem>
- </itemizedlist>
- </sect2>
- <sect2 id="zend.view.introduction.accessors">
- <title>实用访问器</title>
- <para>
- 一般来说,你只需要调用<code>assign()</code>、<code>render()</code>或其中之一来设置/添加过滤器、助手类、和脚本路径。然而,如果希望扩展<code>Zend_View</code>或需要访问它的内部,有许多访问器(Accessor)可用:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <code>getVars()</code> 将返回所有已赋值的变量。
- </para>
- </listitem>
- <listitem>
- <para>
- <code>clearVars()</code> 将清除所有已赋值的变量;当你想重新使用同一个视图对象,并决定哪些变量可用时,这个功能很有用。
- </para>
- </listitem>
- <listitem>
- <para>
- <code>getScriptPath($script)</code> 将获取指定的视图脚本的路径。
- </para>
- </listitem>
- <listitem>
- <para>
- <code>getScriptPaths()</code> 将获取所有注册的脚本路径。
- </para>
- </listitem>
- <listitem>
- <para>
- <code>getHelperPath($helper)</code> 将获取已命名的助手类的路径。
- </para>
- </listitem>
- <listitem>
- <para>
- <code>getHelperPaths()</code> 将获取所有注册的助手路径。
- </para>
- </listitem>
- <listitem>
- <para>
- <code>getFilterPath($filter)</code> 将获取已命名的过滤器类的路径。
- </para>
- </listitem>
- <listitem>
- <para>
- <code>getFilterPaths()</code> 将获取所有注册的过滤器文件的路径。
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|