Zend_View-Introduction.xml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.view.introduction">
  5. <title>Introdução</title>
  6. <para>
  7. <classname>Zend_View</classname> é uma classe para trabalhar com a parte de visualização do
  8. padrão de projeto MVC. Basicamente ela existe para separar o script de visualização dos
  9. controladores e modelos. Ela fornece um sistema de assistentes, filtros de saída e escape
  10. de variáveis.
  11. </para>
  12. <para>
  13. <classname>Zend_View</classname> é um sistema de template agnóstico; você pode usar o
  14. <acronym>PHP</acronym> como sua linguagem de template, ou criar instâncias de outros
  15. sistemas de template e manipulá-las dentro do seu script de visualização.
  16. </para>
  17. <para>
  18. Essencialmente, o funcionamento do <classname>Zend_View</classname> acontece em duas etapas
  19. principais: 1. Seu script controlador cria uma instância de
  20. <classname>Zend_View</classname>, atribuindo-lhe variáveis. 2. O controlador instrui o
  21. <classname>Zend_View</classname> a renderizar uma determinada visualização, passando o
  22. controle ao script de visualização, responsável pela geração da saída a ser visualizada.
  23. </para>
  24. <sect2 id="zend.view.introduction.controller">
  25. <title>Script Controlador</title>
  26. <para>
  27. Neste exemplo simples, suponhamos que seu controlador tenha uma listagem contendo dados
  28. sobre livros, que queremos renderizar para uma visualização. O controlador poderia ser
  29. algo como isto:
  30. </para>
  31. <programlisting language="php"><![CDATA[
  32. // use um modelo para obter os dados para autores e títulos de livros.
  33. $data = array(
  34. array(
  35. 'author' => 'Hernando de Soto',
  36. 'title' => 'The Mystery of Capitalism'
  37. ),
  38. array(
  39. 'author' => 'Henry Hazlitt',
  40. 'title' => 'Economics in One Lesson'
  41. ),
  42. array(
  43. 'author' => 'Milton Friedman',
  44. 'title' => 'Free to Choose'
  45. )
  46. );
  47. // agora atribua os dados do livro a uma instância Zend_View
  48. Zend_Loader::loadClass('Zend_View');
  49. $view = new Zend_View();
  50. $view->books = $data;
  51. // e renderize um script de visualização chamado "booklist.php"
  52. echo $view->render('booklist.php');
  53. ]]></programlisting>
  54. </sect2>
  55. <sect2 id="zend.view.introduction.view">
  56. <title>Script Visualizador</title>
  57. <para>
  58. Agora necessitaremos do script de visualização associado, "booklist.php". Trata-se de um
  59. script <acronym>PHP</acronym> como qualquer outro, com uma exceção: ele executa dentro
  60. do escopo da instância de <classname>Zend_View</classname>, o que implica que as
  61. referências a $this apontam para as propriedades e métodos da instância
  62. <classname>Zend_View</classname>. (Variáveis atribuídas à instância pelo controlador são
  63. propriedades públicas da instância de <classname>Zend_View</classname>). Deste modo, um
  64. script de visualização muito básico poderia se parecer com isto:
  65. </para>
  66. <programlisting language="php"><![CDATA[
  67. if ($this->books): ?>
  68. <!-- Uma tabela contendo alguns livros. -->
  69. <table>
  70. <tr>
  71. <th>Autor</th>
  72. <th>Título</th>
  73. </tr>
  74. <?php foreach ($this->books as $key => $val): ?>
  75. <tr>
  76. <td><?php echo $this->escape($val['author']) ?></td>
  77. <td><?php echo $this->escape($val['title']) ?></td>
  78. </tr>
  79. <?php endforeach; ?>
  80. </table>
  81. <?php else: ?>
  82. <p>Não existem livros a serem exibidos.</p>
  83. <?php endif;?>
  84. ]]></programlisting>
  85. <para>
  86. Observe a forma como empregamos o método "escape()" para escapar o conteúdo das
  87. variáveis para a saída.
  88. </para>
  89. </sect2>
  90. <sect2 id="zend.view.introduction.options">
  91. <title>Opções</title>
  92. <para>
  93. <classname>Zend_View</classname> possui diversas opções que podem ser definidas para
  94. configurar o comportamento de seus scripts de visualização.
  95. </para>
  96. <itemizedlist>
  97. <listitem>
  98. <para>
  99. <property>basePath</property>: indica o caminho base na qual será definido os
  100. caminhos dos scripts, assistentes e filtros. Ele assume esta estrutura de
  101. diretórios:
  102. </para>
  103. <programlisting language="php"><![CDATA[
  104. base/path/
  105. helpers/
  106. filters/
  107. scripts/
  108. ]]></programlisting>
  109. <para>
  110. Isto pode ser definido via <methodname>setBasePath()</methodname>,
  111. <methodname>addBasePath()</methodname> ou passar a opção
  112. <property>basePath</property> para o construtor.
  113. </para>
  114. </listitem>
  115. <listitem>
  116. <para>
  117. <property>encoding</property>: indica a codificação de caracteres para usar com
  118. <methodname>htmlentities()</methodname>,
  119. <methodname>htmlspecialchars()</methodname>, e outras operações. O padrão é
  120. UTF-8. Pode ser definido através <methodname>setEncoding()</methodname> ou
  121. passar a opção <property>encoding</property> para o construtor.
  122. </para>
  123. </listitem>
  124. <listitem>
  125. <para>
  126. <property>escape</property>: indica uma chamada de retorno para ser usada por
  127. <methodname>escape()</methodname>. Pode ser definido através
  128. <methodname>setEscape()</methodname> ou passar a opção <property>escape</property> para
  129. o construtor.
  130. </para>
  131. </listitem>
  132. <listitem>
  133. <para>
  134. <property>filter</property>: indica um filtro para uso após a renderização de um
  135. script de visualização. Pode ser definido através
  136. <methodname>setFilter()</methodname>, <methodname>addFilter()</methodname> ou
  137. passar a opção <property>filter</property> para o construtor.
  138. </para>
  139. </listitem>
  140. <listitem>
  141. <para>
  142. <property>strictVars</property>: força <classname>Zend_View</classname> para
  143. emitir avisos e alertas quando as variáveis de visualização ​​não inicializadas
  144. são acessadas. Pode ser definido chamando
  145. <methodname>strictVars(true)</methodname> ou passar a opção
  146. <property>strictVars</property> para o construtor.
  147. </para>
  148. </listitem>
  149. </itemizedlist>
  150. </sect2>
  151. <sect2 id="zend.view.introduction.shortTags">
  152. <title>Tags Curtas em Scripts de Visualização</title>
  153. <para>
  154. Em nossos exemplos, fazemos uso das tags longas do <acronym>PHP</acronym>:
  155. <emphasis>&lt;?php</emphasis>. Nós também favorecemos o uso da <ulink
  156. url="http://us.php.net/manual/en/control-structures.alternative-syntax.php">sintaxe
  157. alternativa para estruturas de controle</ulink>. Estes são atalhos convenientes para
  158. usar quando escrevemos scripts de visualização, pois fazem as construções mais concisas,
  159. mantem as declarações sobre linhas simples e eliminam a necessidade de caçar os
  160. parênteses dentro de <acronym>HTML</acronym>.
  161. </para>
  162. <para>
  163. Em versões anteriores, muitas vezes recomendamos o uso de tags curtas
  164. (<emphasis>&lt;?</emphasis> e <emphasis>&lt;?=</emphasis>), que tornam os scripts de
  165. visualização um pouco menos prolixos. No entanto, o padrão para a configuração
  166. <constant>short_open_tag</constant> do <filename>php.ini</filename> é tipicamente off em
  167. hosts em produção ou compartilhados - tornando o seu uso não muito portátil. Se você
  168. usar template <acronym>XML</acronym> em scripts de visualização, tags curtas de abertura
  169. farão com que os templates falhem na validação. Finalmente, se você usar tags curtas
  170. quando <constant>short_open_tag</constant> está off, os scripts de visualização ou
  171. causarão erros ou simplesmente imprimirão o código PHP de volta para o visualizador.
  172. </para>
  173. <para>
  174. Se, apesar destas advertências, você deseja usar tags curtas, mas elas estão
  175. desativadas, você tem duas opções:
  176. </para>
  177. <itemizedlist>
  178. <listitem>
  179. <para>
  180. Ative as tags curtas em seu arquivo <filename>.htaccess</filename>:
  181. </para>
  182. <programlisting language="apache"><![CDATA[
  183. php_value "short_open_tag" "on"
  184. ]]></programlisting>
  185. <para>
  186. This will only be possible if you are allowed to create and
  187. utilize <filename>.htaccess</filename> files. This directive can
  188. also be added to your <filename>httpd.conf</filename> file.
  189. </para>
  190. </listitem>
  191. <listitem>
  192. <para>
  193. Enable an optional stream wrapper to convert short tags to
  194. long tags on the fly:
  195. </para>
  196. <programlisting language="php"><![CDATA[
  197. $view->setUseStreamWrapper(true);
  198. ]]></programlisting>
  199. <para>
  200. This registers <classname>Zend_View_Stream</classname> as a stream
  201. wrapper for view scripts, and will ensure that your code
  202. continues to work as if short tags were enabled.
  203. </para>
  204. </listitem>
  205. </itemizedlist>
  206. <warning>
  207. <title>View Stream Wrapper Degrades Performance</title>
  208. <para>
  209. Usage of the stream wrapper <emphasis>will</emphasis> degrade
  210. performance of your application, though actual benchmarks are
  211. unavailable to quantify the amount of degradation. We recommend
  212. that you either enable short tags, convert your scripts to use
  213. full tags, or have a good partial and/or full page content
  214. caching strategy in place.
  215. </para>
  216. </warning>
  217. </sect2>
  218. <sect2 id="zend.view.introduction.accessors">
  219. <title>Utility Accessors</title>
  220. <para>
  221. Typically, you'll only ever need to call on <methodname>assign()</methodname>,
  222. <methodname>render()</methodname>, or one of the methods for setting/adding
  223. filter, helper, and script paths. However, if you wish to extend
  224. <classname>Zend_View</classname> yourself, or need access to some of its
  225. internals, a number of accessors exist:
  226. </para>
  227. <itemizedlist>
  228. <listitem>
  229. <para>
  230. <methodname>getVars()</methodname> will return all assigned variables.
  231. </para>
  232. </listitem>
  233. <listitem>
  234. <para>
  235. <methodname>clearVars()</methodname> will clear all assigned variables;
  236. useful when you wish to re-use a view object, but want to
  237. control what variables are available.
  238. </para>
  239. </listitem>
  240. <listitem>
  241. <para>
  242. <methodname>getScriptPath($script)</methodname> will retrieve the
  243. resolved path to a given view script.
  244. </para>
  245. </listitem>
  246. <listitem>
  247. <para>
  248. <methodname>getScriptPaths()</methodname> will retrieve all registered
  249. script paths.
  250. </para>
  251. </listitem>
  252. <listitem>
  253. <para>
  254. <methodname>getHelperPath($helper)</methodname> will retrieve the
  255. resolved path to the named helper class.
  256. </para>
  257. </listitem>
  258. <listitem>
  259. <para>
  260. <methodname>getHelperPaths()</methodname> will retrieve all registered
  261. helper paths.
  262. </para>
  263. </listitem>
  264. <listitem>
  265. <para>
  266. <methodname>getFilterPath($filter)</methodname> will retrieve the
  267. resolved path to the named filter class.
  268. </para>
  269. </listitem>
  270. <listitem>
  271. <para>
  272. <methodname>getFilterPaths()</methodname> will retrieve all registered
  273. filter paths.
  274. </para>
  275. </listitem>
  276. </itemizedlist>
  277. </sect2>
  278. </sect1>
  279. <!--
  280. vim:se ts=4 sw=4 et:
  281. -->