Translation 12.9% Update 2010-02-15 - Revision 20894

Capítulo 23. Zend_Controller

Índice

23.1. Guia de Início Rápido do Zend_Controller
23.1.1. Introdução
23.1.2. Início Rápido
23.1.2.1. Criando a Estrutura de Arquivos
23.1.2.2. Estabelecendo seu Documento Raiz
23.1.2.3. Criando as Regras de Reescrita
23.1.2.4. Criando o Arquivo de Inicialização
23.1.2.5. Criando o Controlador de Ação Padrão
23.1.2.6. Criando o Script de Visualização
23.1.2.7. Criando o Controlador de Erro
23.1.2.8. Veja o Site!
23.2. O Básico de Zend_Controller
23.3. O Front Controller
23.3.1. Resumo
23.3.2. Metódos Primários
23.3.2.1. getInstance()
23.3.2.2. setControllerDirectory() and addControllerDirectory
23.3.2.3. dispatch()
23.3.2.4. run()
23.3.3. Métodos Acessores Ambientais
23.3.4. Front Controller Parameters
23.3.5. Subclassing the Front Controller
23.4. The Request Object
23.4.1. Introduction
23.4.2. HTTP Requests
23.4.2.1. Accessing Request Data
23.4.2.2. Base Url and Subdirectories
23.4.2.3. Determining the Request Method
23.4.2.4. Detecting AJAX Requests
23.4.3. Subclassing the Request Object
23.5. The Standard Router
23.5.1. Introduction
23.5.2. Using a Router
23.5.3. Basic Rewrite Router Operation
23.5.4. Default Routes
23.5.5. Base URL and Subdirectories
23.5.6. Global Parameters
23.5.7. Route Types
23.5.7.1. Zend_Controller_Router_Route
23.5.7.1.1. Variable Defaults
23.5.7.1.2. Variable Requirements
23.5.7.1.3. Translated segments
23.5.7.2. Zend_Controller_Router_Route_Static
23.5.7.3. Zend_Controller_Router_Route_Regex
23.5.7.4. Zend_Controller_Router_Route_Hostname
23.5.7.5. Zend_Controller_Router_Route_Chain
23.5.7.5.1. Chain Routes via Zend_Config
23.5.7.6. Zend_Rest_Route
23.5.7.6.1. Zend_Rest_Route Usage
23.5.7.6.2. Zend_Rest_Route with Zend_Config_Ini
23.5.7.6.3. Zend_Rest_Controller
23.5.8. Using Zend_Config with the RewriteRouter
23.5.9. Subclassing the Router
23.6. The Dispatcher
23.6.1. Overview
23.6.2. Subclassing the Dispatcher
23.7. Action Controllers
23.7.1. Introduction
23.7.2. Object Initialization
23.7.3. Pre- and Post-Dispatch Hooks
23.7.4. Accessors
23.7.5. View Integration
23.7.5.1. View Initialization
23.7.5.2. Rendering Views
23.7.6. Utility Methods
23.7.7. Subclassing the Action Controller
23.8. Action Helpers
23.8.1. Introduction
23.8.2. Helper Initialization
23.8.3. The Helper Broker
23.8.4. Built-in Action Helpers
23.8.4.1. ActionStack
23.8.4.2. AutoComplete
23.8.4.2.1. AutoCompletion with Dojo
23.8.4.2.2. AutoCompletion with Scriptaculous
23.8.4.3. ContextSwitch and AjaxContext
23.8.4.3.1. Default Contexts Available
23.8.4.3.2. Creating Custom Contexts
23.8.4.3.3. Setting Contexts Per Action
23.8.4.3.4. Initializing Context Switching
23.8.4.3.5. Additional Functionality
23.8.4.3.6. AjaxContext Functionality
23.8.4.4. FlashMessenger
23.8.4.4.1. Introduction
23.8.4.4.2. Basic Usage Example
23.8.4.5. JSON
23.8.4.6. Redirector
23.8.4.6.1. Introduction
23.8.4.6.2. Basic Usage Examples
23.8.4.7. ViewRenderer
23.8.4.7.1. Introduction
23.8.4.7.2. API
23.8.4.7.3. Basic Usage Examples
23.8.4.7.4. Advanced Usage Examples
23.8.5. Writing Your Own Helpers
23.9. The Response Object
23.9.1. Usage
23.9.2. Manipulating Headers
23.9.3. Named Segments
23.9.4. Testing for Exceptions in the Response Object
23.9.5. Subclassing the Response Object
23.10. Plugins
23.10.1. Introduction
23.10.2. Writing Plugins
23.10.3. Using Plugins
23.10.4. Retrieving and Manipulating Plugins
23.10.5. Plugins Included in the Standard Distribution
23.10.5.1. ActionStack
23.10.5.2. Zend_Controller_Plugin_ErrorHandler
23.10.5.2.1. Using the ErrorHandler as a 404 Handler
23.10.5.2.2. Handling Previously Rendered Output
23.10.5.2.3. Plugin Usage Examples
23.10.5.2.4. Error Controller Example
23.10.5.3. Zend_Controller_Plugin_PutHandler
23.11. Using a Conventional Modular Directory Structure
23.11.1. Introduction
23.11.2. Specifying Module Controller Directories
23.11.3. Routing to Modules
23.11.4. Module or Global Default Controller
23.12. MVC Exceptions
23.12.1. Introduction
23.12.2. Handling Exceptions
23.12.3. MVC Exceptions You May Encounter

23.1. Guia de Início Rápido do Zend_Controller

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

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

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

23.1.2.2. Estabelecendo seu Documento Raiz

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

23.1.2.3. Criando as Regras de Reescrita

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

RewriteEngine On
RewriteCond 
%{REQUEST_FILENAME} -[OR]
RewriteCond %{REQUEST_FILENAME} -[OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule 
^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
[Nota] 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] 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.

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

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

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

23.1.2.7. 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 erropor favortente novamente mais tarde.</p>
</
body>
</
html>

23.1.2.8. 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!

Comments

Loading...