Zend_View-Introduction.xml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  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. Isso só será possível se você tiver permissão para criar e utilizar arquivos
  187. <filename>.htaccess</filename>. Esta diretiva também podem ser adicionada ao seu
  188. arquivo <filename>httpd.conf</filename>.
  189. </para>
  190. </listitem>
  191. <listitem>
  192. <para>
  193. Habilitar um stream wrapper opcional para converter tags curtas para tags longas
  194. em tempo real:
  195. </para>
  196. <programlisting language="php"><![CDATA[
  197. $view->setUseStreamWrapper(true);
  198. ]]></programlisting>
  199. <para>
  200. Isso registra <classname>Zend_View_Stream</classname> como um stream wrapper
  201. para scripts de visualização, e garantirá que seu código continue trabalhando
  202. como se as tags curtas estivessem habilitadas.
  203. </para>
  204. </listitem>
  205. </itemizedlist>
  206. <warning>
  207. <title>Stream Wrapper Prejudica o Desempenho</title>
  208. <para>
  209. O uso do stream wrapper <emphasis>irá</emphasis> prejudicar o desempenho de sua
  210. aplicação, embora benchmarks atuais estejam indisponíveis para quantificar o
  211. montante da degradação. Recomendamos que você ative as tags curtas, converta seus
  212. scripts para usar tags completas, ou tenha uma boa estratégia de cache completo e/ou
  213. parcial do conteúdo da página no lugar.
  214. </para>
  215. </warning>
  216. </sect2>
  217. <sect2 id="zend.view.introduction.accessors">
  218. <title>Acessadores Utilitários</title>
  219. <para>
  220. Normalmente, você somente precisará invocar <methodname>assign()</methodname>,
  221. <methodname>render()</methodname>, ou um dos métodos para configurar/adicionar caminhos
  222. de filtro, ajudante e script. No entanto, se você desejar estender
  223. <classname>Zend_View</classname> você mesmo, ou ter acesso a alguns de seus internos,
  224. existe para isso alguns acessadores:
  225. </para>
  226. <itemizedlist>
  227. <listitem>
  228. <para>
  229. <methodname>getVars()</methodname> retornará todas as variáveis ​​atribuídas.
  230. </para>
  231. </listitem>
  232. <listitem>
  233. <para>
  234. <methodname>clearVars()</methodname> limpará todas as variáveis ​​atribuídas; útil
  235. quando você quer reutilizar um objeto visualização, mas quer controlar quais
  236. variáveis ​​estão disponíveis.
  237. </para>
  238. </listitem>
  239. <listitem>
  240. <para>
  241. <methodname>getScriptPath($script)</methodname> recuperará o caminho resolvido
  242. para um dado script de visualização.
  243. </para>
  244. </listitem>
  245. <listitem>
  246. <para>
  247. <methodname>getScriptPaths()</methodname> recuperará todos os caminhos de script
  248. registrados.
  249. </para>
  250. </listitem>
  251. <listitem>
  252. <para>
  253. <methodname>getHelperPath($helper)</methodname> recuperará o caminho resolvido
  254. para a classe assistente chamada.
  255. </para>
  256. </listitem>
  257. <listitem>
  258. <para>
  259. <methodname>getHelperPaths()</methodname> recuperará os caminhos de todos os
  260. assistentes registrados.
  261. </para>
  262. </listitem>
  263. <listitem>
  264. <para>
  265. <methodname>getFilterPath($filter)</methodname> recuperará o caminho resolvido
  266. para a classe filtro chamada.
  267. </para>
  268. </listitem>
  269. <listitem>
  270. <para>
  271. <methodname>getFilterPaths()</methodname> recuperará os caminhos de todos os
  272. filtros registrados.
  273. </para>
  274. </listitem>
  275. </itemizedlist>
  276. </sect2>
  277. </sect1>
  278. <!--
  279. vim:se ts=4 sw=4 et:
  280. -->