Há muito ouço da necessidade do uso de frameworks para o desenvolvimento, e isso não ocorre a toa: eles facilitam muito essa tarefa por já possuírem a “base” que todos precisamos.

Temos vários exemplos de frameworks para PHP, como CakePHP, Symfony, CodeIgniter e Prado, mas vamos falar dessa vez do Zend, o framework da empresa responsável pelo PHP. Não que isso a torne melhor que as demais, mas tratarei dele porque vejo nele a solução para muitos problemas de maneira flexível e simples. Nesse post, falarei do básico para começar a usá-lo.

Antes de começar

Como a minha intenção nesse artigo não é explicar o MVC, padrão de arquitetura usado não só no Zend, como em outros frameworks, indico 2 links em que o assunto é melhor abordado: Wikipedia e O que é MVC um bicho de 10 cabeças ou produtividade???

É necessário habilitar no Apache o uso de .htacces e o mod_rewrite.

Para isso, abra o httpd.conf e procure a linha:

LoadModule rewrite_module modules/mod_rewrite.so

Se estiver com o famoso ‘jogo da velha’ (#) antes desse código, retire-o.

Agora procure a linha:

<directory "xxx">

onde xxx é a pasta que o Apache enxerga as suas páginas web (por padrão, é a htdocs). Certifique-se de que nas linhas abaixo contenha:

Options Indexes FollowSymLinks
AllowOverride All

Primeiros Passos

Considerando que está tudo configurado no ambiente, baixe o Framework aqui e extraia-o. Agora vamos definir a estrutura de diretórios a ser usada:

Obs.: essa é uma forma quase padrão de diretórios para o Zend. Entretanto, podemos fazer a estrutura da maneira que preferirmos, pois isso é configurado no Bootstrap, que veremos mais a frente.

meuprojeto/
    /application
        /config
        /controllers
        /models
        /views
            /helpers
            /scripts
                /index
    /library
        /Zend
    /public
        /css
        /img
        /js

Nos arquivos que você extraiu, procure pela pasta library/Zend e copie seu conteúdo para a pasta Zend indicada na estrutura.

Bootstrap!

O Bootstap nada mais é que o ponto de partida do nosso projeto, a index.php: todas as urls desse site agora passarão primeiro pelo Bootstrap, que por sua vez chamará o Controller, que chamará a View e os Models, se necessários forem.

O index.php seria:

<?php
// configura as mensagens de erro
error_reporting(E_ALL|E_STRICT);
// chamamos todos os diretórios com classe que possamos usar
// isso é muito vantajoso já que poderemos carregar tudo como se estivesse na mesma pasta
set_include_path('.' . PATH_SEPARATOR . './library'
                     . PATH_SEPARATOR . './application/models'
                     . PATH_SEPARATOR . get_include_path());
// chama a classe do Zend, responsável por carregar as demais
include "Zend/Loader.php";
// carrega as classes necessárias
Zend_Loader::loadClass('Zend_Controller_Front'); // classe de Controllers
Zend_Loader::loadClass('Zend_Registry'); // classe que registra objetos
Zend_Loader::loadClass('Zend_View'); // classe da View

// instancia a View
$view = new Zend_View();
// coloca o caminho onde estarão as views
$view->addScriptPath('./application/views/scripts/');
// registra o objeto view
Zend_Registry::set('view', $view);

// instancia o Controller
$controller = Zend_Controller_Front::getInstance();
// seta o diretório onde estão os Controllers
$controller->setControllerDirectory('./application/controllers');
// roda o Controller e Action desejados
$controller->dispatch();

É um exemplo talvez dos mais simples de como fazer um bootstrap. O Zend nos proporciona muito mais possibilidades, mas ainda não vou me estender a elas, ficarei no básico das views e controllers.

Assim que é chamado o dispatch(), o bootstrap nos envia para o Controller que requisitamos quando acessamos o site. Mas talvez a grande dúvida seja: como sabemos onde a requisição do dispatch vai parar? A resposta é: a URL.

No Zend Framework, o controller a ser chamado depende da URL chamada. Mas para isso funcionar, precisaremos de um arquivo .htaccess, como o abaixo:

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css|htm|html)$ index.php
php_flag magic_quotes_gpc off
php_flag register_globals off

Os dois exemplos abaixo, nos levam para o Controller index (classe IndexController)
http://localhost/meuprojeto/
http://localhost/meuprojeto/index/

Enquanto que o exemplo abaixo nos levará para um Controller de usuários (classe UsersController)
http://localhost/meuprojeto/users/

Mas isso ainda não nos mostra nada na tela além de erros: precisamos criar o controller e a view da index.

O Controller

No Zend, Controllers são classes simples, que devem seguir algumas regras:

  • O nome da classe deve ter o sufixo Controller
  • Deve estender a classe Zend_Controller_Action
  • As actions (métodos do controller, que serão as páginas de fato) devem ter o sufixo Action

O nosso Controller Index ficaria:

<?php

class IndexController extends Zend_Controller_Action
{

    public function indexAction()
    {
    	// pega a variável view registrada no bootstrap
        $view = Zend_Registry::get('view');
        // cria atributos, que serão visíveis na view
        $view->title = 'Página Inicial';
        $view->body = 'Hello World';
        // chama a view criada
        echo $view->render('index/index.phtml');

    }

}

Assim, criamos um controller simples, que basicamente chama uma view. Note que actions são as páginas propriamente ditas: então se você quiser criar uma página de contato por exemplo, basta criar uma action para ela. A diferença na hora de passar isso pela URL é bem simples:

http://localhost/meuprojeto/index/ vai para a action padrão do controller (que é setada por padrão como index, mas que pode ser alterada graças ao método setDefaultAction() da classe Zend_Controller_Front)

http://localhost/meuprojeto/index/index/ especifica que deve ir ao Controller Index e Action index

http://localhost/meuprojeto/users/subscribe/ especifica que deve ir ao Controller Users e Action subscribe

A partir daí, já fica também a idéia de como passar parâmetros para a Action…

View

Estamos quase lá: já temos uma página inicial, mas não temos nada para mostrar ao usuário além de erros até o momento. No Zend, o padrão para a View é o phtml, uma extensão normalmente usada para indicar que estamos usando php e html juntos.

A view para a nossa página inicial (index.phtml) ficaria:

<html>
<head>
<title><?php echo $this->escape($this->title); ?>
</head>
<body>

escape($this->body); ?>
</body>
</html>

Lembrando que as views ficam dentro do applications/views/scripts, e essa em específico dentro de uma pasta chamada index, o que não é obrigatório, mas por organização gosto de criar páginas com os mesmos nomes dos controllers.

Rodando

Feitos todos os passos anteriores, basta chamar por http://localhost/meuprojeto/ que deve aparecer uma página de Hello World.

Com certeza o Zend tem muito mais a nos oferecer que isso, mas aqui tivemos um começo para o nosso site e espero ter colocado de maneira sucinta e informativa a base do framework. Apesar da Zend atualmente guiar seus usuários para o uso da classe Zend_Application_Bootstrap_Bootstrapper, ainda acho que o bootstrap da maneira abordada é mais fácil de entender para quem está conhecendo.

Nos próximos posts devo abordar sobre recursos mais específicos, como o Zend_DB para a conexão com Banco de Dados ou o uso do Smarty no lugar do Zend_View (é certo que a Zend está mandando muito bem nessas últimas versões com bibliotecas específicas para o Zend_View, mas gosto muito do Smarty e em algumas pesquisas vejo que não sou o único).

Posted in php at julho 15th, 2009. Trackback URI: trackback
Tags: , ,

Leia também:

5 Responses to “Começando com o Zend Framework 1.8”

  1. agosto 22nd, 2009 at 17:54 #Jadson Moreira ™

    Muito bom o artigo, acredito que assim podemos dar os primeiros passos para usar o “Zend framework”. Otimo trabalho!

  2. outubro 12th, 2009 at 20:37 #Um rápido começo no Zend Framework 1.9 | Diego Jeronymo

    [...] Diego Jeronymo « Começando com o Zend Framework 1.8 [...]

  3. abril 12th, 2010 at 16:29 #Emelia Jacaruso

    Thanks a lot! That was very helpful, I just saved your website url.

  4. junho 29th, 2010 at 9:27 #Tiago

    Eu devo ter lido uns 92873451498752934 tutoriais e não entendo de jeito nenhum o funcionamento e “posicionamento” de uns arquivos, mas com o teu tu torial eu fiz o basicão ali e além de funcionar eu consegui entender direitinho.
    Recomendo pra quem tá começando como eu. PARABÉNS.

  5. setembro 2nd, 2010 at 8:10 #Vince Davis

    I actually appreciate this post. We need extra persons like you bringing value for the community. Can I put this post on my blog? I’d give you credit and link back of course.

Leave a Reply