|
|
@@ -1,38 +1,46 @@
|
|
|
+<?xml version="1.0" encoding="UTF-8"?>
|
|
|
+<!-- EN-Revision: 20799 -->
|
|
|
+<!-- Reviewed: no -->
|
|
|
<sect1 id="zend.view.controllers">
|
|
|
<title>Scripts Controladores</title>
|
|
|
|
|
|
<para>
|
|
|
- O controlador é onde você instancia e configura o Zend_View. Você atribui variáveis ao visualizador, instruindo-o a renderizar a saída usando um script particular.
|
|
|
+ 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:
|
|
|
+ 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 role="php"><![CDATA[<?php
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
$view = new Zend_View();
|
|
|
$view->a = "Hay";
|
|
|
$view->b = "Bee";
|
|
|
$view->c = "Sea";
|
|
|
-?>]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
- Porém, isto pode ser tedioso quando você coletar os valores a serem atribuídos a partir de um array ou objeto.
|
|
|
+ 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 um array ou objeto "a granel." O exemplo seguinte tem o mesmo efeito que o exemplo de atribuição de propriedades uma a uma.
|
|
|
+ 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 role="php"><![CDATA[<?php
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
$view = new Zend_View();
|
|
|
|
|
|
-// Atribua um array associativo onde a chave é nome da variável
|
|
|
+// atribui uma matriz associativa onde a chave é nome da variável
|
|
|
// e o valor é proprio valor atribuído.
|
|
|
$array = array(
|
|
|
'a' => "Hay",
|
|
|
@@ -41,76 +49,85 @@ $array = array(
|
|
|
);
|
|
|
$view->assign($array);
|
|
|
|
|
|
-// faça o mesmo com as propriedades públicas do objeto;
|
|
|
-// note a forma a conversão ao tipo array na atribuição.
|
|
|
+// 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>
|
|
|
+]]></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.
|
|
|
+ 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 role="php"><![CDATA[<?php
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
$view = new Zend_View();
|
|
|
$view->assign('a', "Hay");
|
|
|
$view->assign('b', "Bee");
|
|
|
$view->assign('c', "Sea");
|
|
|
-?>]]>
|
|
|
- </programlisting>
|
|
|
-
|
|
|
+]]></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 Zend_View 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.
|
|
|
+ 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 role="php"><![CDATA[<?php
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
$view = new Zend_View();
|
|
|
$view->a = "Hay";
|
|
|
$view->b = "Bee";
|
|
|
$view->c = "Sea";
|
|
|
echo $view->render('someView.php');
|
|
|
-?>]]>
|
|
|
- </programlisting>
|
|
|
-
|
|
|
+]]></programlisting>
|
|
|
</sect2>
|
|
|
|
|
|
<sect2 id="zend.view.controllers.script-paths">
|
|
|
-
|
|
|
- <title>View Script Paths</title>
|
|
|
+ <title>Caminhos do Script de Visualização</title>
|
|
|
|
|
|
<para>
|
|
|
- Por padrão, Zend_View 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'), Zend_View irá procurar por ele em "/path/to/app/controllers/someView.php".
|
|
|
+ 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 Zend_View onde procurar pelos referidos scripts, use o método setScriptPath().
|
|
|
+ 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 role="php"><![CDATA[<?php
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
$view = new Zend_View();
|
|
|
$view->setScriptPath('/path/to/app/views');
|
|
|
-?>]]>
|
|
|
- </programlisting>
|
|
|
+]]></programlisting>
|
|
|
|
|
|
<para>
|
|
|
- Agora quando você chamar $view->render('someView.php'), ele irá procurar em "/path/to/app/views/someView.php".
|
|
|
+ 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, Zend_View 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.
|
|
|
+ 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 role="php"><![CDATA[<?php
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
$view = new Zend_View();
|
|
|
$view->addScriptPath('/path/to/app/views');
|
|
|
$view->addScriptPath('/path/to/custom/');
|
|
|
@@ -119,12 +136,36 @@ $view->addScriptPath('/path/to/custom/');
|
|
|
// 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>
|
|
|
-
|
|
|
+]]></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:
|
|
|
--->
|
|
|
+-->
|