2.2. Iniciando
Anterior | Capítulo 2. Zend_Controller | Próxima

## 2.2. Iniciando

### 2.2.1. Introdução

O sistema `Zend_Controller` foi construído tendo em mente a extensibilidade, que pode ser obtida pela criação de subclasses das classes existentes, ou pela criação de novas classes que implementem as interfaces `Zend_Controller_Router_Interface` e `Zend_Controller_Dispatcher_Interface`.

### 2.2.2. Configuração do Servidor

Zend_Controller foi construído para suportar modernos web sites com URIs limpas (nenhum ou quase nenhum parâmetro de consulta). Deste modo, a configuração sugerida requer que servidor web suporte a função de reescrita de URI para redirecionar todas as requisições para um simples arquivo, aqui chamado "index.php", o qual irá simplesmente incializar o `Zend_Controller_Front`. Em servidores Apache, isto é manipulado por um módulo opcional chamado mod_rewrite.

O primeiro passo para configurar o servidor é instalar o mod_rewrite com sucesso, habilitando-o. O passo seguinte é colocar dois arquivos no diretório raiz: .htaccess e index.php. O arquivo .htaccess é usado pelo Apache e deve conter uma diretiva do mod_rewrite para redirecionar todas as requisições para index.php. Para propósitos de desenvolvimento, isto é freqüentemente mais simples para escrever uma diretiva mod_rewrite rule que ter de redirecionar todas as requisições para index.php com exceção de certas extensões de arquivo. Aqui está um exemplo de como configurar o .htaccess:

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

No exemplo acima, todas as requisições que não contiverem uma das extensões de arquivo listadas serão passadas para index.php. Isto é útil para desenvolvimento, porém para sistemas em produção as regras de reescrita devem ser escritas de forma a excluir os diretórios.

### 2.2.3. Arquivo de Inicialização

Depois de criar e configurar o arquivo .htaccess, crie um novo arquivo chamado`index.php`. Este é um arquivo de inicialização. O propósito do arquivo index.php é somente inicializar o Zend_Controller_Front, o qual deve estar apropriadamente localizado fora do diretório raiz do web server.

| Nota
O arquivo de inicialização deveria ser o único arquivo armazenado no document root.

Para propósitos de segurança, a Zend recomenda fortemente não armazenar quaisquer arquivos PHP em diretórios que são acessíveis ao webserver (aqueles que estão abaixo da raiz de documentos). Enquanto isto não é possível a todos os cenários, como em hosts compartilhados, isto deve ser considerada uma boa prática e observada sempre que possível.

Crie o arquivo de inicialização, `index.php`, na raiz de documentos para inicializar o Zend_Controller_Front:

    <?php

    require_once 'Zend/Controller/Front.php';

    Zend_Controller_Front::run('/path/to/your/controllers')

    ?>

Consulte a próxima seção relativa ao `/path/to/your/controllers`. Como instruído em `README.txt`, o diretório da biblioteca Zend Framework deve constar no `include_path`. Se isto não for setado em `php.ini`, `set_include_path()` deve ser chamada neste arquivo antes do `require_once()`.

| Nota
Por enquanto, estamos investigando soluções que não requerem a instalação do mod_rewrite. Nós intentamos sugerir uma configuração para ambos os sistemas, com e sem as funcionalidades de mod_rewrite. Também, por favor note que este sistema não está fora do escopo (não está destinado) ao Apache ou mod_rewrite especificamente , qualquer webserver com capacidades de redirecionamento similares deve ser suficiente (EXPLICAR).

### 2.2.4. Estrutura de Diretórios

É recomendável que os websites construídos com o Zend Framework compartilhem uma estrutura de diretório comum. Enquanto isto não for possível a todas as situações, isto é para muitos ou talvez mais. Escolhendo utilizar esta estrutura ira fazer o seu código mais facilmente inteligível para para alguém familiarizado com as convenções adotadas no Zend Framework.

A estrutura de diretórios sugerida consiste também dos diretórios de biblioteca (da Zend e dos outros) e de aplicação.

    /application
      /models
      /views
      /controllers
    /document_root
      /images
      /styles
      .htaccess
      index.php
    /library
      /Zend

| Nota
Esta seção ainda não está terminada. Ela permanece sujeita a alterações.

### 2.2.5. IndexController

Cada site deve definir um controlador chamado `IndexController`. Este é o controlador que irá ser utilizado quando nenhum controlador for especificado na URI, como no exemplo desta URI:

    http://framework.zend.com/

A classe `IndexController` deve ser armazenada em um arquivo chamado `IndexController.php`, que por sua vez deve ser localizado no diretório dos controladores. A `IndexController` deve possuir uma subclasse `Zend_Controller_Action`. Aqui está um exemplo de como usar `IndexController`:

    <?php

    require_once 'Zend/Controller/Action.php';

    class IndexController extends Zend_Controller_Action
    {
    	public function indexAction()
    	{
    		echo 'Hello from IndexController';
    	}

    	public function noRouteAction()
    	{
    		$this->_redirect('/');
    	}
    }

    ?>

| Nota
Esta seção ainda não está terminada. Ela permanece sujeita a alterações.

Anterior | Acima | Próxima
Capítulo 2. Zend_Controller | Principal | 2.3. Subclassing