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] 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] 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] 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] Nota
Esta seção ainda não está terminada. Ela permanece sujeita a alterações.