Guia de Início Rápido do Zend_Controller

Introdução

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.

Início Rápido

Se você necessita de informações mais detalhadas, veja as seções seguintes. Se você quiser apenas começar rápido, continue lendo.

Criando a Estrutura de Arquivos

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

Estabelecendo seu Documento Raiz

No seu servidor web, defina seu documento raiz para o diretório html/ da estrutura de arquivos acima mencionada.

Criando as Regras de Reescrita

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.

Criando o Arquivo de Inicialização

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.

Criando o Controlador de Ação Padrã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.

Criando o Script de Visualização

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>

Criando o Controlador de Erro

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>

Veja o Site!

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!