Índice
Zend_Controller é o coração do sistema MVC do Zend Framework. MVC Model-View-Controller é um padrão (design pattern) que separa a Lógica (Regra de Negócios) da Exibição.
Zend_Controller_Front implementa o padrão
Front
Controller, em que todas as requisições são interceptadas pelo front controller (Controle de Frente) e expede um único Action Controllers (Ação de Controle) baseado na requisição URL.
O sistema Zend_Controller foi construído visando a extensibilidade, cada subclasse de uma classes existentes, escrevem novas classes que implementam várias interfaces e classes abastratas que formam a base da família de classes do controle, ou excrevendo plugins ou ações ajudantes (action helpers) para aumentar ou manipular a funcionalidade do sistema.
Se você precisa de maiores informações, pule para a próxima seção. Se você quer apenas começar a trabalhar rapidamente, continue lendo.
O primeiro passo é criar seu layout do sistema de arquivos. Geralmente o layour segue o seguinte exemplo:
application/
controllers/
IndexController.php
models/
views/
scripts/
index/
index.phtml
helpers/
filters/
html/
.htaccess
index.php
Seu Servidor Web, deve apontar para seu document root, nesse caso o diretório html/ como mostrado no layout de sistema de arquivos a cima.
Edite o arquivo html/.htaccess a cima como o seguinte exemplo:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
![]() |
Leia mais sobre mod_rewrite |
|---|---|
As regras de rewrite a cima permite acesso a qualquer arquivo sob seu documment root do virtual host. Se se você não quer expor os arquivos desse diretórios, você pode ser mais restritivo em suas regras. Vá até página do Apache e leia mais sobre o mod_rewrite |
Se você está'usando IIS 7.0, use as seguintes configurações de rewrite:
<?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>
Essas regras a cima vão criar a rota de requisições dos recursos existentes (symlinks, non-empty files ou non-empty directories) consequentes e todas as outras requisiçòes ao front controller.
![]() |
Nota |
|---|---|
As regras a cima de rewrite são para Apache; para exemplo de regras de rewrite oara oytris Servidores Web, veja a documentaçao de roteamento. |
O Arquivo Bootstrap é a página onde todas as solicitaçòes são encaminhadas através do -- html/index.php neste caso.
Abra html/index.php no editor de sua preferência e adicione a seguinte linha :
Zend_Controller_Front::run('/path/to/app/controllers');
// Atenção!
// Só execute esse paço se você souber o que está fazendo!
// Normalmente este parâmtro se encontra dentro de /path/to/app/application/configs
// em um projeto normal.
Isso irá criar uma instância e executar o front controller, o qual vai encaminhar suas requisições aos action controllers (controles de açao).
Antes de falarmos sobre Controles de Acão (Action Controller), você deve primeiramente entender como as requisições são encaminhadas no Zend Framework. Por padrão, é mapeado o primeiro segmento de uma URL chamado de controle (controller) e depois o segundo segmento chamado de ação (action), aqui temos o 'C' (Controll) e o 'V' (View) do MVC.
Por exemplo, temos a URL
http://framework.zend.com/roadmap/components,
nesse caso o controle (controller) é roadmap e a açao (action) é components.
Se nenhuma açao é fornecida, a ação index é executada e se nenhum controle é fornecido também, o controle index é executado
(Desde que o Apache esteja com DirectoryIndex automático).
Quando é executado o Zend_Controller pega o valor do controle e mapeia
para ele uma classe. Por padrão o nome da classe é o título do controle
mais a palavra Controller.
Deste modo, o nosos exemplo a cima, o controle
roadmap é mapeado para a classe
RoadmapController.
Semelhantemente, o valor da ação é mapeado para o método da classe controller.
Por padrão, o valor é lower-cased, e a palavra
Action é adicionada. Deste modo, em
nosso exemplo a cima, a ação components
se refere a componentsAction() e o método final
é chamado RoadmapController::componentsAction().
Vamos a prática... vamos agora criar um controle e uma ação padrão.
O controle e ação padrão são chamados ambos
de index. Abra o arquivo
application/controllers/IndexController.php,
e adicione o seguinte código:
/** Zend_Controller_Action */
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
}
}
Por padrão, o "
ViewRenderer Action Helpers" (Auxiliar de Ação Renderizador de Visualização) está habilitado. Isso significa que é simples definir um método de ação a um correspondente script de visualização (view script), você vai imediatamente ter o conteúdo renderizado.
Por padrão Zend_View é usado como uma camada de visualização (View Layer) no MVC.
O ViewRenderer faz algumas mágicas e usa o nome do controle (por exemplo, index) e o nome da ação atual (exemplo, index) para determina qual templete usar.
Por padrão, templates utilizam a extensão .phtml, então isso significa que no exemplo a cima o template index/index.phtml vai ser renderizada. Adicionalmente, o ViewRenderer automaticamente assume que o diretório views/ está no mesmo nível que o diretório controller e que o atual view script vai estar no subdiretório views/scripts/. Deste modo, a template a ser renderizado vai ser encontrado em application/views/scripts/index/index.phtml
Como mencionado na seção anteror, view scripts são encontrados em
application/views/scripts/; o view script para o controller e action padrão é application/views/scripts/index/index.phtml. Crie esse arquivo e digite algo 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>
Por padrão
O plugin manipulador de erro (plugin handler error) é registrado.
Esse plugin espera que um controller exista para manipular os erros.
Por padrão é assumido o ErrorController junto com o
método errorAction():
class ErrorController extends Zend_Controller_Action
{
public function errorAction()
{
}
}
Deduzindo, já sabemos o layout do diretório, então esse arquivo vai ficar em
application/controllers/ErrorController.php.
Você vai precisar também criar um view script em
application/views/scripts/error/error.phtml;
Segue um exemplo a baixo:
<!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>
Com seu primeiro controller e view contruído corretamente, você já pode
abrir seu navegador e digitar o endereço de seu site.
O domínio nesse exemplo é example.com e
qualquer uma das seguintes URLs vão
executar uma página.
http://example.com/
http://example.com/index
http://example.com/index/index
Você agora já está pronto para começar a criar mais controles e ações. Parabéns!