Zend Framework para um PHP mais poderoso
Ajude a Combater o Spam! Clique aqui!
Esse tutorial tem como objetivo mostrar para as pessoas que nunca viram nada sobre o ZF(Zend Framework) e estão querendo saber como ele funciona.
Quem já ouviu falar do Zend Framework? Resumidamente a Zend é uma empresa responsável pela manutenção e desenvolvimento do PHP.
A engine de orientação a objetos do php5 foi totalmente reescrita pelo pessoal da Zend.
Mas o que seria um framework?
O framework é um conjunto de classes com objetivo de reutilização de um design, provendo um guia para uma solução de arquitetura em um domínio específico de software. (Wikipedia)
Pode-se dizer que ele seria um conjunto de bibliotecas específicas.
Falando nossa lingua, o framework é um conjuntão de bibliotecas que ajuda em nosso trabalho do dia a dia, e nos trabalhos mais complicados também.
Esse artigo utiliza a versão 0.8 do framework. (dia 28/02/07)
[atualizado]
Versão atual: 1.0.2 (01/09/07)
[/atualizado]
Entendendo o Zend Framework
O Zend Framework segue o padrão MVC - Model View Controller. É um padrão de arquitetura onde separa o GUI, templates, etc(View) da lógica(Model) e do controle(Controller).
Então nele você pode usar a mesma lógica e/ou controle em diversas interfaçes com o usuário.
Usando o Zend Framework
- Faça download dele no site oficial: http://framework.zend.com/download
- Descompacte o arquivo em qualquer pasta. Exemplo: tar zxvf ZendFramework-1.0.2.tar.gz -C ~/
Agora vamos arrumar a estrutura de diretórios necessária para o correto funcionamento do ZF.

PS: a pasta ZF-tutorial fica dentro do DocumentRoot, que é onde fica suas páginas no servidor(padrão do apache: htdocs/ ou /var/www/).
No caso a pasta controllers, models e views estão dentro da pasta app(application, nome sugestivo). publico é onde vai suas outras coisas normais como imagens e css, js e assim por diante. E lib é a pasta onde vai ficar o ZF.
Entre na pasta onde você descompactou o arquivo tarball(.tar.gz), depois entre na pasta library e copie a pasta zend para a sua pasta lib(na ZF-tutorial) do seu sistema. Talvez você precise mudar(ou copiar) como root, aqui no exemplo vou usar sem o root.
-
cd ~/ZendFramework-1.0.1/library
-
cp -Rfv Zend/ documentRoot_do_apache/ZF-tutorial/lib/
Aí depois no diretório lib irá ter lib/Zend, certo?

Configurando o Apache
Primeira coisa que temos a fazer é abilitar o módulo rewrite do apache.
Edite o arquivo de configuração do apache, httpd.conf.
Descomente(tirando o #) a linha onde está escrito:
-
LoadModule rewrite_module modules/mod_rewrite.so
-
AddModule mod_rewrite.c
Defina o AccessFileName (pode ser no final do arquivo):
-
AccessFileName .htaccess
Setar a opção AllowOverride como All.
Trocar as linhas abaixo:
-
#<Directory />
-
# Options Indexes FollowSymLinks
-
# AllowOverride None
-
#</Directory>
por:
-
<directory>
-
Options FollowSymLinks Includes
-
AllowOverride All
-
</directory>
Criando o Bootstrapping
O controller do ZF, Zend_Controller, é feito para suportar websites com urls limpas.
Então, todas as requisições precisam ser feitas diretamente em um arquivo index.php, essa prática é conhecida como bootstrapping.
E para isso precisamos criar alguns arquivos .htaccess.
ZF-tutorial/.htaccess
-
RewriteEngine on
-
RewriteRule .* index.php
-
php_flag magic_quotes_gpc off
-
php_flag register_globals off
Essa RewriteRule quer dizer que para qualquer coisa escrita ele(apache) irá redirecionar para o index.php(que fica dentro do ZF-tutorial, calma que ainda vamos cria-lo). ![]()
Alí também setamos algumas configurações do PHP.ini. Essas configurações provavelmente já estão setadas como padrão, mas é bom ter certeza né. Elas só vão funcionar se estiver habilitado o mod_php no httpd.conf do apache.
Agora vamos setar nosso .htaccess na pasta público. Lá estará os arquivos JavaScript, CSS, imagens e assim por diante. Então vamos habilitar tudo por lá.
ZF-tutorial/publico/.htaccess
-
RewriteEngine off
Agora na pasta app e no lib não queremos que nenhum intruso acesse, porque lá estão nossos arquivos preciosos. ![]()
ZF-tutorial/app/.htaccess
-
deny from all
ZF-tutorial/lib/.htaccess
-
deny from all
Esse esquema de bootstrapping é recomendação dos desenvolvedores do ZF, ok? Motivo de segurança, sabe como é né.
Criando o nosso index.php(bootstrap file)
Agora vamos criar nossa index.php na pasta ZF-tutorial.
ZF-tutorial/index.php
-
<?php
-
error_reporting(E_ALL|E_STRICT); // para mostrar os erros, apenas nos testes(precisa estar setado no PHP.ini)
-
-
// Seta o timezone pra são paulo (>=PHP 5.1)
-
date_default_timezone_set(‘America/Sao_Paulo’);
-
-
/* Seta include path para o funcionamento correto do framework ***OBRIGATÓRIO*** */
-
.PATH_SEPARATOR.‘./app/models/’ //facilitar depois ao loadar as nossos modelos
-
-
/* Necessário para loadar qualquer outra classe do framework ***OBRIGATÓRIO*** */
-
include "Zend/Loader.php";
-
-
//loada o controller front
-
Zend_Loader::loadClass(‘Zend_Controller_Front’);
-
-
/*
-
Essa classe se encontra em Zend/Controller/Front.php
-
Pode ser loadado diretamente pelo nome se preferir
-
-
Para começar nós precisamos loadar primeiro o front controller
-
Ele faz um controle automático para detectar a base URL e fazer o redirecionamento correto
-
*/
-
$controlador = Zend_Controller_Front::getInstance();
-
$controlador->throwExceptions(true); // mostrar excessões(apenas para testes)
-
$controlador->setControllerDirectory(‘./app/controllers’); // seta diretório com nossos controllers
-
-
//Roda o sistema
-
$controlador->dispatch();
-
-
//sem fechar a tag php
Note que agente não fecha a tag php para nos previnir de erros usando o header(), no caso de espaços em branco adicionais depois do ?>.
Agora na pasta controllers vamos criar um IndexController.php. Esse controller vai entrar em ação sempre que o index for chamado.
Para entender como funciona, precisamos saber como o Zend_Controller_Front trabalha.
O ZF usa um sistema de Controllers(Controladores) e Actions(Ações). E isso é setado diretamente na url(lembra do bootstrapping?). Como?
Usando o nosso exemplo, no formato http://localhost/ZF-tutorial/index/teste o index é o Controller e o teste é o Action. Outro exemplo, http://localhost/ZF-tutorial/foo/bar o foo é o Controller e o bar é o Action.
E quando você não coloca nada? Exemplo, http://localhost/ZF-tutorial/ o Zend_Controller_Front considera como index o Controller e index a Action.
O que vem depois é parâmetro, mas isso é assunto pra depois
Vamos fazer nosso IndexController então
ZF-tutorial/app/controllers/IndexController.php
-
<?php
-
class IndexController extends Zend_Controller_Action
-
{
-
public function indexAction()
-
{
-
$this->view->titulo = ‘Primeiro Tutorial de Zend Framework’;
-
$this->view->detalhe = ‘Olá Mundo!’;
-
}
-
}
Atenção: Sempre o controller deve levar esse padrão NomeController.php e a classe com o mesmo nome do arquivo. A primeira letra sempre em maiúsculo e o resto minúsculo.
Já os Actions também deve levar esse padrão nomeAction(), sempre minúsculo.
Mas se você for rodar o sistema agora, vai perceber que vai dar uma excpetion gigantesca aí, certo?
Ela está falando que nós não temos o viewer para o index action do index controller.
Para criar, precisamos acessar a pasta scripts que está no ZF-tutorial/views/. Lá vamos criar uma pasta para cada Controller nosso, no nosso caso iremos criar uma pasta chamada index(por causa do IndexController). Todos os templates para o IndexController devem estar nessa pasta. O mais legal é que o nome do template leva o nome da action.
Calma, vou explicar: Por padrão cada action você pode ter um template ou não, mas se a action for tem um template para ela, então o template deve levar o mesmo nome da action. Por exemplo index.phtml(extenção do template) é o viewer do indexAction(), sacaram?
Na prática agora:
-
cd documentRoot_do_apache/ZF-tutorial/app/views/scripts
-
mkdir index
Agora nós temos que criar o index.phtml
ZF-tutorial/app/views/scripts/index/index.phtml
-
<html>
-
<head>
-
</head>
-
<body>
-
</body>
-
</html>
é recomendável que usemos o escape para escapar tags html.
Agora vamos testar nossa aplicação.
Acesse o http://localhost/ZF-tutorial e depois tente http://localhost/ZF-tutorial/index/index
Você vai perceber que deu no mesmo.
Tarefinha, de leve
Agora deixo uma tarefa para vocês: Criar um zfAction(), no IndexController, com seu respectivo viewer. Após criado, acessem http://localhost/ZF-tutorial/index/zf e vejam o que aconte!
Conclusões
Apesar desse tutorial mostrar de maneira simples como funciona o Zend Framework, podemos perceber como o Zend Frameowork é facil de usar e ao mesmo tempo é poderoso.
Para um maior aprendizado, irei postar um novo tutorial com muito mais recursos do ZF.
Por enquanto eu recomendo um tutorial muito bom(desenvolvedor do ZF), eu me baseei no tutorial dele, e tabmém usem bastante o manual.
Acesse a página de tutoriais do Zend Framework
Cya later!!

em March 1st, 2007 às 11:35 am
Usando
Mozilla Firefox 2.0 no
Windows XP
Boa abordagem Felipe
Parabens.
em March 1st, 2007 às 11:51 am
Usando
Mozilla Firefox 2.0.0.1 no
Linux
Realmente um excelente abordagem!!
Parabéns! Assim que me sobrar um tempin vou dar uma testada nesses exemplos!
em March 1st, 2007 às 12:47 pm
Usando
Mozilla Firefox 2.0 no
Ubuntu Linux
Felipe! Muito interessante o tutorial! Só uma nota! o ZendFramework na data em que este foi escrito (28/02) ja estava na versão 0.8 com a inclusão de vários módulos saídos do incubator.
A explicação foi bem abordada! Para quem tiver interesse, existe também outro tutorial muito bom:
http://akrabat.com/zend-framework-tutorial/
Esse enfoca bem as utilidades e propósitos do MVC! Pena que não foi atualizado para releases mais recentes do ZF (ainda está na 0.6).
Grande abraço e sucesso!
em March 1st, 2007 às 3:51 pm
Usando
Mozilla Firefox 2.0 no
Linux
Excelente texto!!!!! muito bom isso, pois escuto muito de várias pessoas que o PHP é uma linguagem pobre e sem muitos recursos. Acabo sempre discutindo com as pessoas tentando defender a causa, tentando mostrar que o PHP pode sim se comparar ao Java, .Net e que possui quase que os mesmos recursos e sendo executado com maior velocidade. PHP não é somente uma linguagem de script para fazer sites com enquetes, newsletters e coisas assim.
Parabéns
em March 1st, 2007 às 7:01 pm
Usando
Mozilla Firefox 2.0.0.2 no
Windows XP
Marc Abillama,
Realmente acabou de sair a versão mais nova(0.8) hehehe e nem percebi. Valeu pela dica!
Mas continua mesma coisa pelo menos o que abordamos nesse tutorial.
Com relação ao MVC, pelo menos no manual e em tutoriais que vi aí pela internet(que são poucos) eles enfocam o MVC ainda sim. Essa é o design deles para esse framework.
Obrigado
em March 29th, 2007 às 9:48 am
Usando
WordPress 2.0.2
[...] uma série de artigos sobre alguns componentes do ZF. Enquanto isso, você pode ver o artigo “Zend Framework para um PHP mais poderoso“, de Felipe Tonello, que dá uma visão geral e os primeiros passos do framework.Compare [...]
em May 24th, 2007 às 4:28 pm
Usando
Mozilla Firefox 1.5.0.11 no
Windows XP
Oi Felipe,
Estamos organizando em Sao Paulo, em julho, um evento de Frameworks de desenvolvimento Web em PHP. Contaremos com palestra de Cake e Symphony e gostaria que você apresentasse o Zend.
Por favor entre em contato para eu poder passar mais informações ! Tentei contato pelo gmail, sem sucesso !
Atenciosamente,
Andre’
em June 9th, 2007 às 4:35 pm
Usando
Mozilla Firefox 2.0.0.3 no
Windows XP
você está de parabens
muito bem organizado
gostaria de uma pequena ajuda
pois quando eu colocar o arquivo .htaccess
ta dando um erro na hora q eu acesso
diz que foi cofigurado errado o apache
conto com sua ajuda
em July 30th, 2007 às 11:23 pm
Usando
Mozilla Firefox 2.0.0.5 no
Windows XP
então… você configurou certo o httpd.conf ?
em August 2nd, 2007 às 6:56 am
Usando
Mozilla Firefox 2.0.0.6 no
Windows XP
Olá! Show de bola seu tutorial.
Fiz o passo-a-passo usando a versão 1.0.1 do ZendFramework e não estava localizando a classe Zend. Funcionou com uma pequena correção na linha 17 do script ZF-tutorial/index.php
Zend_Loader::loadClass(’Zend_Controller_Front’);
em August 2nd, 2007 às 12:14 pm
Usando
Mozilla Firefox 2.0.0.6 no
Linux
Ihhh é verdade mesmo hehehe
Obrigado pelo comentário
em August 27th, 2007 às 1:46 pm
Usando
Mozilla Firefox 2.0.0.6 no
Windows XP
Bom,
Eu tava seguindo o tutorial sobre ZF na página do Felipe Tonello - http://www.felipetonello.com/blog/2007/02/28/zend-framework-para-um-php-mais-poderoso/
e um parte do tutorial ele pedia pra descomentar as seguintes linhas no httpd.conf:
1.
LoadModule rewrite_module modules/mod_rewrite.so
2.
AddModule mod_rewrite.c
Porém a segunda linha AddModule mod_rewrite.c ,não existe e depois que eu tento adiciona-la
o meu servidor apache não starta mais.
E outro erro que está acontecendo é no arquivo Registry.php na seguinte função:
protected static function init()
{
// está acontecendo o seguinte erro: “‘)’ expected in function call (self).”
self::setInstance(new self::$_registryClassName());
}
Não sei mais o que fazer pra tentar resolver esse problema.
Desde já agradeço,
em August 27th, 2007 às 5:30 pm
Usando
Mozilla Firefox 2.0.0.6 no
Windows XP
Tudo muito Show ,
,mas sobre o modo rewrite : os hosts em uso hoje constumam usar essa connfiguração ?
estava usando host free e queria testar o zend neles !!!!
em August 28th, 2007 às 6:13 am
Usando
Mozilla Firefox 2.0.0.6 no
Windows XP
Não eu to trabalhando localmente por enquanto!
aí num ta funcionando!
em August 28th, 2007 às 11:58 am
Usando
Mozilla Firefox 2.0.0.6 no
Linux
Sobre o “AddModule mod_rewrite.c” se está dando erro, apenas não adicione esta linha no httpd.conf
Sobre o Registry.. como está seu código? você está xamando estaticamente o registry?
em August 28th, 2007 às 2:13 pm
Usando
Mozilla Firefox 2.0.0.6 no
Windows XP
Quando eu coloco ZF na pasta Lib do meu projeto, e como estou utilizando o eclipse…quando eu abro o meu projeto,
jah aparece a mensagem de erro!
não to intendendo o pq!
em September 18th, 2007 às 8:52 am
Usando
Mozilla Firefox 2.0.0.6 no
Windows XP
Olá Felipe,
Há possibilidades de trabalhar o Zend usando Frames ? Se sim, você pode me dar essa dica !
em October 12th, 2007 às 10:21 pm
Usando
Internet Explorer 7.0 no
Windows XP
Como fica a configuracao do http.conf, do bootstrap e dos arquivos .htaccess no apache para windows???
em October 15th, 2007 às 9:19 pm
Usando
Mozilla Firefox 2.0.0.7 no
Windows XP
Parabéns pelo post ,é visto a hora de dar o próximo passo a aprofundar-me nos Frameworks.
em October 15th, 2007 às 9:45 pm
Usando
Mozilla Firefox 2.0.0.6 no
Ubuntu Linux
Onde lê se “Windows XP” leia “wine”
em November 1st, 2007 às 12:07 am
Usando
Internet Explorer 7.0 no
Windows XP
“O controller do ZF, Zend_Controller, é feito para suportar websites com urls limpas.
Então, todas as requisições precisam ser feitas diretamente em um arquivo index.php, essa prática é conhecida como bootstrapping.
E para isso precisamos criar alguns arquivos .htaccess.”
esses arquivos não tem nome? nao entendi essa parte
em November 26th, 2007 às 2:29 pm
Usando
Mozilla Firefox 2.0.0.9 no
Windows XP
Parabéns bem esclarecedor sua abordagem do assunto.
Estaremos aqui tb para contribuir.
Adriano Rodrigues
em December 5th, 2007 às 1:43 pm
Usando
Mozilla Firefox 2.0.0.11 no
Windows XP
Bom atigo pena que no arquivo ZF-tutorial/app/views/scripts/index/index.phtml não separou o script do html, não respeitando a arquitetura MVC.
em December 6th, 2007 às 4:07 am
Usando
Flock 1.0.1 no
Linux
Flávio,
Não entendi o que você quis dizer.
Abraços
em December 20th, 2007 às 12:25 am
Usando
Mozilla Firefox 2.0.0.11 no
Ubuntu Linux
Muito bom. Bem objetivo.
, principalmente quando o cliente já tem sua conta de hospedagem…
Uso o Codeigniter pela viabilidade nos servers, já que (na maioria) não temos acesso a configurações de apache, php, etc, mas o Zend tem me chamado a atenção.
Como contornar esse problema ? Uma coisa é rodar ele localmente, outra é nos servers remoto da vida
Abraços e muita sorte para nós!
em December 27th, 2007 às 3:26 pm
Usando
Internet Explorer 7.0 no
Windows XP
Ladies & Gentleman:
Estou com um sério problema (eu acho). Não conheço nada do Zend, o indivíduo foi apresentado hoje para minha pessoa.
Preciso instalá-lo na minha máquina e aprender a trabalhar c/ ele, por causa de um novo projeto. No entanto, não estou conseguindo nem instalar, rs.
Não encontro nenhum executável dentro da pasta… como faço?
Agradeço desde já, qq ajuda será bem vinda!
Camila Andrade (.NET Developer)
em February 18th, 2008 às 2:56 pm
Usando
WordPress MU
[...] também vi muitos tutorias, artigos e um deles me trouxe um certo interesse também que o site do Felipe Tonello que descobri através do Google. Daqui alguns dias estarei aprofundando mais nesse tema e criarei [...]
em March 27th, 2008 às 9:01 am
Usando
Netscape Navigator 4.0
[...] routes" work in ZF. I found some articles yesterday that explains it better: Akra’s tutorial Felipe Tonello’s tutorial (in portuguese) In fact, the directive above must be configured in apache’s file httpd.conf: [...]
em April 22nd, 2008 às 12:12 pm
Usando
Mozilla Firefox 2.0.0.14 no
Windows XP
Olá Felipe Tonello,
Comecei a estudar o Zend recentemente ( para ser exato há dois dias ) e estou tendo alguns problemas para instalar e configurar o ambiente de desenvolvimento.
Como material de estudo utilizei o livro “Practical Web 2.0 Applications with PHP” como meu guia.
A primeira coisa que fiz foi criar a seguinte estrutura:
/
|- /data
| |- /logs
| |- /uploaded-files
| |- /tmp
|- /htdocs
|- /include
| |- /Controllers
|- /templates
Depois fiz um fake DNS para o meu navegador resolver o hostname “phpweb20” para 130.100.250.122.
127.0.0.1 localhost
130.100.250.122 phpweb20
(c:\windows\system32\drivers\etc\hosts)
Em seguida modifiquei o httpd.conf:
Ativei os seguintes módulos
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
Fiz um virtualhost para o endereço 130.100.250.122 com as seguintes conf.:
ServerName phpweb20
DocumentRoot “c:/wamp/www/phpweb20/htdocs”
Options FollowSymLinks
AllowOverride None
Options All
php_value include_path “.;c:/wamp/www/phpweb20/include;c:/wamp/bin/php/php5.2.5/PEAR”
php_value magic_quotes_gpc off
php_value register_globals off
Dei acesso ao endereço:
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from 130.100.250.122
Algumas outras configurações continuam da seguinte forma:
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
AddType application/x-httpd-php .php3
Depois criei um arquivo “.htaccess” com a seguinte configuração (coloquei ele na pasta htdocs):
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1
Continuando copiei apenas a pasta Zend com os seus subdiretórios encontrada em (ZendFramework-1.5.1\library\Zend) para dentro da pasta include.
|- /include
| |- /Controllers
| |- /Zend
Então fiz os seguintes arquivos:
O primeiro localizado no htdocs:
(index.php)
setControllerDirectory(’../include/Controllers’);
$controller->dispatch();
?>
O segundo e terceiro localizados no include\Controllers:
(IndexController.php)
(NewsController.php)
Beleza, então na hora de testar acontece o seguinte erro:
http://phpweb20/
Fatal error: Uncaught exception ‘Zend_Controller_Dispatcher_Exception’ with message ‘Invalid controller specified (error)’ in C:\wamp\www\phpweb20\include\Zend\Controller\Dispatcher\Standard.php:249 Stack trace: #0 C:\wamp\www\phpweb20\include\Zend\Controller\Front.php(914): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 C:\wamp\www\phpweb20\htdocs\index.php(7): Zend_Controller_Front->dispatch() #2 {main} thrown in C:\wamp\www\phpweb20\include\Zend\Controller\Dispatcher\Standard.php on line 249
http://phpweb20/news
Erro 404.
Você pode me ajudar a me explicar o que está acontecendo e me mostrar uma solução? Ficaria muito agradecido!
em April 23rd, 2008 às 1:41 pm
Usando
Mozilla Firefox 2.0.0.14 no
Windows XP
Opa, tudo bom?
Então.. pela excpetion que está retornando.. acredito que seja no seu rewrite module..
está linha não está correta:
RewriteRule ^(.*)$ index.php/$1
troque para:
RewriteRule ^(.*)$ index.php
Att,
Felipe Tonello
em April 24th, 2008 às 6:23 pm
Usando
Mozilla Firefox 2.0.0.14 no
Windows Server 2003
Será que existe a possibilidade de reduzir o consumo de CPU no zend framework ??? possuo uma revenda de sites, num servidor dedicado virtual e infelizmente os sites estão lerdando um poquinho…
Tava monitorando no putty, o uso da cpu ta em 100% sempre… então acho que o framework se torna inviável para este tipo de aplicação não é ?
Ainda possuo um sistema velho, usando o tiny but strong e realmente a diferença é bastante perceptivel.
em May 2nd, 2008 às 10:07 am
Usando
Internet Explorer 7.0 no
Windows XP
Opa…
fala felipe.. blz?
kra.. mto bom esse tuto..
já tinha testado alguns frameworks..
testado também alguns tutoriais do Zend e nao tinha conseguido fazer funcionar… acho que estava errando algo na config do apache.. hehe
vou fuçar mais no Zend agora..
valew!!
até mais
abraços..
em May 16th, 2008 às 7:48 pm
Usando
Mozilla Firefox 2.0.0.14 no
Windows XP
kra como faço para subir um site feito no zend…
no servidor????????
essas configurações funcionarão perfeitamente?