Zend_View-Introduction.xml 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <sect1 id="zend.view.introduction">
  2. <title>简介</title>
  3. <para>
  4. <code>Zend_View</code>是用来在MVC模式中处理View(视图)部份的一个类。也就是说它用来使视图部份的代码与Model及controller部分分离。它提供了helper,output filter,variable escaping等几个功能组件。
  5. </para>
  6. <para>
  7. <code>Zend_View</code>使用PHP本身作为你的模板,或者你也可以建立其它模板引擎的实例,并用你的view代码来对其进行操作。
  8. </para>
  9. <para>
  10. 使用<code>Zend_View</code>主要有两步: 1. 你的Controller建立一个<code>Zend_View</code>实例,并将需要的变量传递给它; 2. Controller告诉<code>Zend_View</code>解析一个特定的视图,生成View输出的内容。
  11. </para>
  12. <sect2 id="zend.view.introduction.controller">
  13. <title>控制器脚本</title>
  14. <para>
  15. 下面是一个简单的例子。假设你有一个书籍清单,想把它打印出来。控制器代码可能看起来是这样的:
  16. </para>
  17. <programlisting role="php"><![CDATA[<?php
  18. //使用一个模型来获取书籍作者和标题相关数据。
  19. $data = array(
  20. array(
  21. 'author' => 'Hernando de Soto',
  22. 'title' => 'The Mystery of Capitalism'
  23. ),
  24. array(
  25. 'author' => 'Henry Hazlitt',
  26. 'title' => 'Economics in One Lesson'
  27. ),
  28. array(
  29. 'author' => 'Milton Friedman',
  30. 'title' => 'Free to Choose'
  31. )
  32. );
  33. //传递数据给Zend_View类的实例 
  34. Zend_Loader::loadClass('Zend_View');
  35. $view = new Zend_View();
  36. $view->books = $data;
  37. //解析一段View代码"booklist.php"来显示数据
  38. echo $view->render('booklist.php');]]>
  39. </programlisting>
  40. </sect2>
  41. <sect2 id="zend.view.introduction.view">
  42. <title>视图脚本</title>
  43. <para>
  44. 现在我们看看相关的视图代码"booklist.php"。这是一段普通的代码,但是有一点特别:它是在<code>Zend_View</code>实例的内部运行的,所以$this指向的是<code>Zend_View</code>实例和类方法。(controller传递给<code>Zend_View</code>实例的变量是public的)。一段非常基本的视图代码看起来是这样的:
  45. </para>
  46. <programlisting role="php"><![CDATA[<?php if ($this->books): ?>
  47. <!-- 包含几本书信息的HTML表格. -->
  48. <table>
  49. <tr>
  50. <th>Author</th>
  51. <th>Title</th>
  52. </tr>
  53. <?php foreach ($this->books as $key => $val): ?>
  54. <tr>
  55. <td><?php echo $this->escape($val['author']) ?></td>
  56. <td><?php echo $this->escape($val['title']) ?></td>
  57. </tr>
  58. <?php endforeach; ?>
  59. </table>
  60. <?php else: ?>
  61. <p>There are no books to display.</p>
  62. <?php endif; ?>]]>
  63. </programlisting>
  64. <para>
  65. 注意我们使用escape()来转义输出。
  66. </para>
  67. </sect2>
  68. <sect2 id="zend.view.introduction.options">
  69. <title>选项</title>
  70. <para>
  71. <code>Zend_View</code>有若干选项来配置视图脚本的运行。
  72. </para>
  73. <itemizedlist>
  74. <listitem>
  75. <para>
  76. <code>basePath</code>: 指示一个基本路径,可以在下面设置script、 helper 和 filter 路径。目录结构如下:
  77. </para>
  78. <programlisting role="php"><![CDATA[
  79. base/path/
  80. helpers/
  81. filters/
  82. scripts/]]>
  83. </programlisting>
  84. <para>
  85. 可以通过 <code>setBasePath()</code>、<code>addBasePath()</code>、或 <code>basePath</code>设置给构造器。
  86. </para>
  87. </listitem>
  88. <listitem><para>
  89. <code>encoding</code>: 指定 <code>htmlentities()</code>、<code>htmlspecialchars()</code>和其它操作所采用的字符集,缺省为 ISO-8859-1 (latin1)。也可以通过<code>setEncoding()</code> 或 <code>encoding</code> 设置给构造器。
  90. </para></listitem>
  91. <listitem><para>
  92. <code>escape</code>: 指定<code>escape()</code>所使用的回调函数(callback)。也可以通过<code>setEscape()</code>或<code>escape</code>设置给构造器。
  93. </para></listitem>
  94. <listitem><para>
  95. <code>filter</code>: 指示在解析视图脚本后使用的过滤器。可以通过<code>setFilter()</code>、<code>addFilter()</code>或者<code>filter</code>设置给构造器。
  96. </para></listitem>
  97. <listitem><para>
  98. <code>strictVars</code>: 指定某些未初始化的视图变量被访问时,<code>Zend_View</code>必须发出通知和警告。可以通过调用<code>strictVars(true)</code> 或传递<code>strictVars</code>给构造器来设置。
  99. </para></listitem>
  100. </itemizedlist>
  101. </sect2>
  102. <sect2 id="zend.view.introduction.accessors">
  103. <title>实用访问器</title>
  104. <para>
  105. 一般来说,你只需要调用<code>assign()</code>、<code>render()</code>或其中之一来设置/添加过滤器、助手类、和脚本路径。然而,如果希望扩展<code>Zend_View</code>或需要访问它的内部,有许多访问器(Accessor)可用:
  106. </para>
  107. <itemizedlist>
  108. <listitem>
  109. <para>
  110. <code>getVars()</code> 将返回所有已赋值的变量。
  111. </para>
  112. </listitem>
  113. <listitem>
  114. <para>
  115. <code>clearVars()</code> 将清除所有已赋值的变量;当你想重新使用同一个视图对象,并决定哪些变量可用时,这个功能很有用。
  116. </para>
  117. </listitem>
  118. <listitem>
  119. <para>
  120. <code>getScriptPath($script)</code> 将获取指定的视图脚本的路径。
  121. </para>
  122. </listitem>
  123. <listitem>
  124. <para>
  125. <code>getScriptPaths()</code> 将获取所有注册的脚本路径。
  126. </para>
  127. </listitem>
  128. <listitem>
  129. <para>
  130. <code>getHelperPath($helper)</code> 将获取已命名的助手类的路径。
  131. </para>
  132. </listitem>
  133. <listitem>
  134. <para>
  135. <code>getHelperPaths()</code> 将获取所有注册的助手路径。
  136. </para>
  137. </listitem>
  138. <listitem>
  139. <para>
  140. <code>getFilterPath($filter)</code> 将获取已命名的过滤器类的路径。
  141. </para>
  142. </listitem>
  143. <listitem>
  144. <para>
  145. <code>getFilterPaths()</code> 将获取所有注册的过滤器文件的路径。
  146. </para>
  147. </listitem>
  148. </itemizedlist>
  149. </sect2>
  150. </sect1>
  151. <!--
  152. vim:se ts=4 sw=4 et:
  153. -->