# Zend_Controller Início Rápido

## Introdução

`Zend_Controller` é o coração do sistema MVC do Zend Framework. MVC significa Model-View-Controller é um modelo de desenvolvimento voltado para a separação da lógica de aplicação da lógica de visualização. `Zend_Controller_Front` implementa um padrão de Front Controller, no qual todos os pedidos são interceptado pelo controlador 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 classes controladoras, ou escrevendo plugins ou ações auxiliadoras para aumentar ou manipular a funcionalidade do sistema.

## Início Rápido

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

### Crie sua 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

### Estabeleça seu documento raiz

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

### Crie suas regras de re-escrita

Edite o arquivo `html/.htaccess` acima para ficar como:

    RewriteEngine on
    RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

As regas acima irão enviar qualquer solicitação a não-recurso (imagens, folhas de estilo) para o controlador de frente. Se existir outras extensões que você queira excluir do controlador de frente (PDFs, arquivos texto, etc), adicione suas extensões ao comutador, ou crie suas próprias regras de re-escrita.

As regas de re-escrita acima são para o Apache; para exemplos de regras de re-escrita para outros servidores web, veja a documentação do roteador.

### Crie seu arquivo de inicialização

O arquivo de inicialização é a página onde todas as requisições passam -- `html/index.php` no caso. Abra o arquivo `html/index.php` em um editor de sua escolha e adicione o seguinte:

    <?php
    require_once 'Zend/Controller/Front.php';
    Zend_Controller_Front::run('/path/to/app/controllers');

Isto irá criar e despachar o controlador de frente, que irá encaminhar as requisições para os controladores de ação.

### Crie o seu controlador de ação padrão

Antes de discutir controladores de ação, você deve primeiro entender como as requisições são roterizadas 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 expedidor 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:

    <?php
    /** Zend_Controller_Action */
    require_once 'Zend/Controller/Action.php';

    class IndexController extends Zend_Controller_Action
    {
        public function indexAction()
        {
        }
    }

O ajudante 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 Visaulização do MVC. O `ViewRenderer` faz alguma mágica, e usa o nome do controlador (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` 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`.

### Crie o seu 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 tecle 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>My first Zend Framework App</title>
    </head>
    <body>
        <h1>Hello, World!</h1>
    </body>
    </html>

### Crie seu controlador de erro

Por padrã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`:

    <?php
    /** Zend_Controller_Action */
    require_once 'Zend/Controller/Action.php';

    class ErrorController extends Zend_Controller_Action
    {
        public function errorAction()
        {
        }
    }

Assumindo o layout de diretório discutido, 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>Error</title>
    </head>
    <body>
        <h1>An error occurred</h1>
        <p>An error occurred; please try again later.</p>
    </body>
    </html>

### Veja o site!

Com o seu primeiro controlador e visualizador embaixo do seu cinto, você agora pode disparar o seu navegador e navegar para 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`

Você agora está pronto para iniciar a criação de mais controladores e metódos de ação. Parabéns!