# 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.

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!