Zend_Controller
é o coração do sistema MVC
do Zend Framework. MVC significa Model-View-Controller
e é um padrão de projeto voltado para a separação da lógica de aplicação da lógica
de visualização. Zend_Controller_Front
implementa o padrão
Front
Controller, no qual todos os pedidos são interceptados pelo controlador
frontal e despachados individualmente para ações baseadas no
URL requerido.
O sistema Zend_Controller
foi construído com a extensibilidade
em mente, tanto por derivação das classes existentes, como escrevendo novas classes
que implementam as várias interfaces e classes abstratas que formam a fundação da
família de classes controladoras, ou escrevendo plugins ou auxiliadores de ação para
aumentar ou manipular a funcionalidade do sistema.
Se você necessita de informações mais detalhadas, veja as seções seguintes. Se você quiser apenas começar rápido, continue lendo.
O primeiro passo é criar sua estrutura de arquivos. A estrutura típica é a seguinte:
application/ controllers/ IndexController.php models/ views/ scripts/ index/ index.phtml helpers/ filters/ html/ .htaccess index.php
No seu servidor web, defina seu documento raiz para o diretório
html/
da estrutura de arquivos acima mencionada.
Edite o arquivo html/.htaccess
acima para ficar como:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
Saiba mais sobre o mod_rewrite
As regras de reescrita acima permitem o acesso a qualquer arquivo no documento raiz de seu host virtual. Se houver arquivos que você não quer expor desta maneira, você pode ser mais restritivo em suas regras. Vá até o site do Apache para aprender mais sobre o mod_rewrite.
Se estiver usando o IIS 7.0, utilize o seguinte como sua configuração de reescrita:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="Imported Rule 1" stopProcessing="true"> <match url="^.*$" /> <conditions logicalGrouping="MatchAny"> <add input="{REQUEST_FILENAME}" matchType="IsFile" pattern="" ignoreCase="false" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" pattern="" ignoreCase="false" /> </conditions> <action type="None" /> </rule> <rule name="Imported Rule 2" stopProcessing="true"> <match url="^.*$" /> <action type="Rewrite" url="index.php" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
As regras acima irão encaminhar os pedidos de recursos existentes (links simbólicos existentes, arquivos não vazios, ou diretórios não vazios) nesse sentido, e todos os outros pedidos para o controlador frontal.
Nota
As regras de reescrita acima são para o Apache, para exemplos de regras de reescrita de outros servidores web, consulte a documentação do roteador.
O arquivo de inicialização é a página onde passam todas as requisições
-- html/index.php
no caso. Abra o arquivo
html/index.php
em um editor de sua escolha
e adicione o seguinte:
Zend_Controller_Front::run('/path/to/app/controllers');
Isto irá instanciar e despachar o controlador frontal, que irá encaminhar as requisições para os controladores de ação.
Antes de discutir sobre os controladores de ação, você deve primeiro entender como
as requisições são roteadas no Zend Framework. Por padrão, o primeiro seguimento
de um caminho de um URL aponta para um controlador, o segundo
para uma ação. Por exemplo, dado o URL
http://framework.zend.com/roadmap/components
, o caminho é
/roadmap/components
, que irá apontar para o controlador
roadmap e para a ação components. Se
nenhuma ação for informada, a ação index é assumida, e se
nenhum controlador for informado, o controlador index é
assumido (seguindo a convenção do Apache que mapeia um
DirectoryIndex automaticamente).
O despachador do Zend_Controller
toma o valor do
controlador e mapeia-o para uma classe. Por padrão, ele pega o nome do
controlador, com a primeira letra em maiúsculo, e acrescenta a palavra
Controller. Sendo assim, em nosso exemplo acima, o
controlador roadmap é mapeado para a classe
RoadmapController
.
Semelhantemente, o valor da ação é mapeado para um método da classe do controlador.
Por padrão, o valor é transformado em letras minúsculas, e a palavra
Action é acrescentada. Sendo assim, em nosso exemplo acima, a
ação components torna-se
componentsAction()
, e o método final chamado é
RoadmapController::componentsAction()
.
Então, seguindo em frente, vamos agora criar um controlador de ação padrão e um
método de ação. Como mencionado anteriormente, o controlador padrão e a ação são
ambos chamados index. Abra o arquivo
application/controllers/IndexController.php
, e introduza
o seguinte:
/** Zend_Controller_Action */ class IndexController extends Zend_Controller_Action { public function indexAction() { } }
O auxiliar de ação ViewRenderer é
habilitado por padrão. Isto significa que apenas definindo um método de ação
simples e o script de visão correspondente, você terá o seu conteúdo mostrador
imediatamente. Por padrão, Zend_View
é usado como a camada
de Visualização do MVC. O ViewRenderer
faz alguma mágica, e usa o nome do controlador (ex.: index)
e o nome da ação atual (ex.: index) para determinar qual
modelo mostrar. Por padrão, modelos terminam com a extensão
.phtml
, então isto significa que, no exemplo acima o modelo
index/index.phtml
será mostrado. Adicionalmente, o
ViewRenderer automaticamente assume que o diretório
views/
, que está no mesmo nível que do diretório do
controlador, será o diretório base de visualização, e que o atual script de
visualização estará no subdiretório views/scripts/
, Sendo
assim, o modelo mostrado é encontrado em
application/views/scripts/index/index.phtml
.
Com mensionado na seção
anterior, scripts de visualização são encontrados em
application/views/scripts/
; O script padrão para o
controlador e ação padrão está em
application/views/scripts/index/index.phtml
. Crie este
arquivo e escreva nele algum HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Meu primeiro aplicativo em Zend Framework</title> </head> <body> <h1>Olá, Mundo!</h1> </body> </html>
Por padrão, o plugin
do manipulador de erro é registrado. Este plugin espera que um controlador
para manipular erros exista. Por padrão, ele assume um
ErrorController no módulo padrão com um método
errorAction()
:
class ErrorController extends Zend_Controller_Action { public function errorAction() { } }
Assumindo a estrutura de diretório já discutida, este arquivo estará em
application/controllers/ErrorController.php
. Você também
precisará criar o script de visualização em
application/views/scripts/error/error.phtml
; o conteúdo
do exemplo parecerá com:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Erro</title> </head> <body> <h1>Ocorreu um erro</h1> <p>Ocorreu um erro; por favor, tente novamente mais tarde.</p> </body> </html>
Com o seu primeiro controlador e visualizador em suas mãos, você agora pode abrir
o seu navegador e navegar até o site. Assumindo que o seu domínio é
example.com
, qualquer dos seguintes URLs
irão mostrar a página que acabamos de criar:
-
http://example.com/
-
http://example.com/index
-
http://example.com/index/index
Agora você está pronto para iniciar a criação de mais controladores e metódos de ação. Parabéns!