| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.view.controllers">
- <title>Scripts Controladores</title>
- <para>
- O controlador é onde você instancia e configura o <classname>Zend_View</classname>. Você
- atribui variáveis ao visualizador, instruindo-o a renderizar a saída usando um script
- particular.
- </para>
- <sect2 id="zend.view.controllers.assign">
- <title>Atribuindo Variáveis</title>
- <para>
- Seu script controlador deverá atribuir as variáveis necessárias ao visualizador antes de
- passar o controle para ele. Normalmente, você pode fazer isso atribuindo valores aos
- nomes de propriedades da instância do visualizador:
- </para>
- <programlisting language="php"><![CDATA[
- $view = new Zend_View();
- $view->a = "Hay";
- $view->b = "Bee";
- $view->c = "Sea";
- ]]></programlisting>
- <para>
- Porém, isto pode ser tedioso quando você coletar os valores a serem atribuídos a partir
- de uma matriz ou objeto.
- </para>
- <para>
- O método assign() permite a atribuições a partir de uma matriz ou objeto "a granel". O
- exemplo seguinte tem o mesmo efeito que o exemplo de atribuição de propriedades uma a
- uma.
- </para>
- <programlisting language="php"><![CDATA[
- $view = new Zend_View();
- // atribui uma matriz associativa onde a chave é nome da variável
- // e o valor é proprio valor atribuído.
- $array = array(
- 'a' => "Hay",
- 'b' => "Bee",
- 'c' => "Sea",
- );
- $view->assign($array);
- // faz o mesmo com as propriedades públicas do objeto;
- // note a forma a conversão ao tipo matriz na atribuição.
- $obj = new StdClass;
- $obj->a = "Hay";
- $obj->b = "Bee";
- $obj->c = "Sea";
- $view->assign((array) $obj);
- ]]></programlisting>
- <para>
- Alternativamente, você pode usar o método assign para fazer atribuições uma a uma
- passando a string contendo o nome da variável, e logo em seguida o valor a ser
- atribuído.
- </para>
- <programlisting language="php"><![CDATA[
- $view = new Zend_View();
- $view->assign('a', "Hay");
- $view->assign('b', "Bee");
- $view->assign('c', "Sea");
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.view.controllers.render">
- <title>Renderizando um Script de Visualização</title>
- <para>
- Uma vez que tenhamos atribuído todas as variáveis necessárias, o controlador irá
- instruir o <classname>Zend_View</classname> a renderizar um script de visualização
- particular. Ele fará isso chamando o método render(). Note que o método irá retornar a
- visualização renderizada, mas não irá imprimí-la, ficando ao seu encargo fazê-lo
- (echo() ou print()) no momento apropriado.
- </para>
- <programlisting language="php"><![CDATA[
- $view = new Zend_View();
- $view->a = "Hay";
- $view->b = "Bee";
- $view->c = "Sea";
- echo $view->render('someView.php');
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.view.controllers.script-paths">
- <title>Caminhos do Script de Visualização</title>
- <para>
- Por padrão, <classname>Zend_View</classname> espera encontrar os scripts de visualização
- localizados no mesmo diretório onde reside o script controlador. Por exemplo, se o seu
- script controlador estiver em "/path/to/app/controllers" e chamar
- $view->render('someView.php'), <classname>Zend_View</classname> irá procurar por ele em
- "/path/to/app/controllers/someView.php".
- </para>
- <para>
- Obviamente, os seus scripts de visualização estarão provavelmente situados em outro
- lugar. Para informar ao <classname>Zend_View</classname> onde procurar pelos referidos
- scripts, use o método setScriptPath().
- </para>
- <programlisting language="php"><![CDATA[
- $view = new Zend_View();
- $view->setScriptPath('/path/to/app/views');
- ]]></programlisting>
- <para>
- Agora quando você chamar $view->render('someView.php'), ele irá procurar em
- "/path/to/app/views/someView.php".
- </para>
- <para>
- De fato, você pode "empilhar" caminhos usando o método addScriptPath(). A medida que
- você acrescenta caminhos à pilha, <classname>Zend_View</classname> irá procurar pela
- visão no caminho mais recentemente adicionado à pilha. Isto permite sobrepor visões
- padronizadas por visões customizadas, permitindo a criação de "temas" e "peles" para
- algumas visões, deixando outras intocadas.
- </para>
- <programlisting language="php"><![CDATA[
- $view = new Zend_View();
- $view->addScriptPath('/path/to/app/views');
- $view->addScriptPath('/path/to/custom/');
- // agora quando você chamar $view->render('booklist.php'),
- // Zend_View procurará primeiro em "/path/to/custom/booklist.php",
- // depois em "/path/to/app/views/booklist.php", e finalmente no
- // diretório corrente, por "booklist.php".
- ]]></programlisting>
- <note>
- <title>Nunca utilize uma entrada do usuário para definir caminhos de script</title>
- <para>
- <classname>Zend_View</classname> utiliza caminhos de script para pesquisar e
- renderizar os scripts de visualização. Como tal, estes diretórios devem ser
- conhecidos de antemão, e estarem sob seu controle. <emphasis>Nunca</emphasis> defina
- caminhos de script de visualização com base em entradas do usuário, pois você pode
- se abrir potencialmente para a vulnerabilidade de Inclusão Local de Arquivo se o
- caminho especificado incluir percursos ao diretório pai. Por exemplo, a seguinte
- entrada pode desencadear o problema:
- </para>
- <programlisting language="php"><![CDATA[
- // $_GET['foo'] == '../../../etc'
- $view->addScriptPath($_GET['foo']);
- $view->render('passwd');
- ]]></programlisting>
- <para>
- Embora este exemplo seja artificial, ele mostra claramente o problema em potencial.
- Se você <emphasis>deve</emphasis> contar com a entrada do usuário para definir o
- caminho do script, filtre a entrada de forma apropriada e certifique-se de que os
- caminhos sejam controlados por sua aplicação.
- </para>
- </note>
- </sect2>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|