Fala pessoal! Essa semana aprenderemos um pouco sobre frameworks PHP, basicamente sobre o Zend Framework. Como todos devem saber, a ZEND é uma empresa fundada em 1999 por Andi Gutmans e Zeev Suraski e é a responsável pela manutenção e desenvolvimento de produtos e serviços para a linguagem PHP.
O Zend Framework foi lançado no dia 04 de março de 2006 e inclui diferentes componentes desenvolvidos em PHP5 para prover alta qualidade para desenvolvimento de aplicações web e web services.
Página oficial: http://framework.zend.com/

Versão Atual: Zend Framework 0.1.5 (11 de julho de 2006)
Mas o que seria um 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.
Qual a diferença entre biblioteca de classes e framework?
O framework se diferencia pois a biblioteca de classes se concentra em apenas oferecer implementação de funcionalidades, sem definir a reutilização de uma solução de arquitetura (design).
O Zend Framework segue o padrão MVC - Model View Controller ou Modelo-Visão-Controlador que é um padrão de arquitetura de aplicações que visa separar a lógica da aplicação (Model), da interface do Usuário (View) e do fluxo da aplicação (Controller). Permite que a mesma lógica de negócios possa ser acessada e visualizada por várias interfaces.

Componentes do Zend Framework
Zend_Controller e Zend_View
Zend_Controller fornece os alicerces para a construção de websites baseados no MVC.
Zend_View separa o script de visualização dos controladores e modelos.
Zend_Config
Simplifica o uso de dados de configuração para aplicações web.
Zend_Db
Componente que provê acesso a banco de dados. Adicionalmente, ele ajuda a proteger suas consultas contra ataques de SQL Injection.
Zend_Fed
Componente que auxilia a geração de dados RSS e Atom para feeds.
Zend_Http_Cliente
Componente para o desenvolvimento de CLIENTES web services.
Zend_Filter_Input
Componente para filtragem e validação de campos de entrada.
Zend_Json
Componente que transforma estruturas PHP em JSON - JavaScript Object Notation (http://www.json.org/) para uso em aplicações com AJAX.
Zend_Log
Componente utilizado para geração de log de erros.
Zend_Mail e Zend_Mime
Componente para envio de email com suporte a anexos de todos os MIMES suportados.
Zend_PDF
Componente para criação e alteração de documentos PDF.
Zend_Search_Lucene
Para que não conhece o Lucene é uma software de busca e uma API de indexação de documentos escritos na linguagem Java e é mantido pela Apache Software Foundation (http://lucene.apache.org/java/docs/). O Zend_Search_Lucene é um componente do Lucene totalmente escrito em PHP 5.
Zend_XMLRpc
Componente para chamada remota de procedimentos. O SOAP é um padrão de RPC para WebServices.
Configuração do Zend Framework
01. Faça o dowload do Zend Framework no site: http://framework.zend.com
02. Descompacte-o numa pasta um nível abaixo do DocumentRoot do Apache.
03. Renomeie a pasta para zf.
Apache
A primeira coisa a fazer é configurar o Apache a trabalhar no mod_rewrite que terá a responsabilidade de redirecionar todas as requisições para um arquivo chamado index.php
http.conf - Apache (Windows)
Tirar o # (jogo da velha etc...) do início da linha:
LoadModule rewrite_module modules/mod_rewrite.so
Definir o nosso arquivo htaccess
AccessFileName .htaccess
Trocar as linhas abaixo:
#<Directory />
# Options Indexes FollowSymLinks
# AllowOverride None
#</Directory>
por:
<Directory />
Options FollowSymLinks Includes
AllowOverride All
</Directory>
Arquivo .htaccess
Crie um arquivo .htacess e salve no DocumentRoot do servidor Apache. No meu caso é c:/pagina.
RewriteEngine on
RewriteBase /
RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ index.php
php_flag magic_quotes_gpc off
php_value include_path "c:/zf/library"
Todas as requisições que não contiverem uma das extensões de arquivo listadas serão passadas para index.php
Restartar o Apache.
Estrutura da nossa aplicação de exemplo
c:/pagina (document_root do servidor apache)
.htaccess
index.php
c:/framework (aplicações que utilizam framework)
/exemplo01
/controllers
IndexController.php
/views
hello.php
/models
c:/zf/library (bliblioteca do zend framework)
Como você pode ver acima, a pasta que contém o nosso exemplo de framework, bem como a biblioteca do framework, encontra-se fora do DocumentRoot do Apache pois é uma recomendação da Zend devido a segurança.
Exemplo 01 - Hello World!
Vamos desenvolver o nosso primeiro exemplo utilizando o Zend Framework. Faremos o famoso Hello World!
Arquivo index.php
O arquivo index.php deverá ser salvo no DocumentRoot do Apache e será o responsável por inicializar o Zend_Controller_Front.
Nesse arquivo, teremos também o Zend_View para chamar a nossa aplicação.
<?
include 'Zend.php';
Zend::loadClass('Zend_Controller_Front');
Zend::loadClass('Zend_View');
$view = new Zend_View;
$view->addScriptPath('c:/framework/exemplo01/views');
Zend::register('view', $view);
$controller = Zend_Controller_Front::getInstance();
$controller->setControllerDirectory('c:/framework/exemplo01/controllers');
$controller->dispatch();
?>
Criando o indexController.php
Este arquivo deve ser criado na pasta controllers da sua aplicação.
<?php
class indexController extends Zend_Controller_Action {
public function indexAction()
{
$view = Zend::registry('view');
$view->title = 'iMasters - Júlio César Martini';
$view->body = 'Hello, World!';
echo $view->render('hello.php');
}
public function noRouteAction() {
$this->_redirect('/');
}
}
?>
Criando o hello.php
Este arquivo deve ser criado na pasta views da sua aplicação.
<html>
<head>
<title><?php echo $this->escape($this->title); ?></title>
</head>
<body>
<?php echo $this->escape($this->body); ?>
</body>
</html>
Resultado:

No browser, você acessando via http://localhost ou http://127.0.0.1 deverá visualizar o Hello, World!
Você pode testar pelos seguintes endereços também:
http://127.0.0.1:85/index
http://127.0.0.1:85/index/index
E vocês me perguntam: Mas por que por esses endereços a página é acessada?
Pensem! Isso será assunto dos próximos artigos. Aguardem!
Para baixar todos os arquivos que usei para configuração do Zend Framework, clique aqui e faça o download do script.
Semana que vem tem mais. Espero que vocês tenham gostado!
Não deixe de nos enviar críticas ou sugestões para o próximo assunto, afinal a coluna é de vocês. Boa semana a todos!
Fábio Martins
Olá, parabéns pela matéria, desta forma podemos trabalhar de maneira padronizada e com qualidade, a única dúvida que eu tive, é se eu quizer rodar mais de uma aplicação no servidor apache como proceder, após a configuração não consegui rodar nenhuma aplicação minha...de qualquer forma estamos caminhando para melhor, abraço.
Maurício Vinicius
Preciso começar a me abituar com frameworks, pois não aguento mais fazer a mesma coisa centenas de vezes. Ótima matéria, terá outras partes desta matéria? Parabéns. Vlw!
Renato Alexandre Costa Freitas
A matéria é muito boa, já havia procurado muito algo sobre o assunto e principalmente sobre o frame da zend. agora com as configurações propostas meu apache não conseguiu abrir nada, no log do apache identifiquei que o erro estava sendo ocasionado pelo .htacess... o que será que está acontecendo de errado?
[]s
Júlio César Martini
Sobre o erro no Apache, você baixou o arquivo que deixei disponível no artigo? Ali tem o meu .htacess, talvez possa te ajudar no problema. Qualquer coisa coloca a mensagem de erro aqui pra tentarmos ajudar. Valeu!!!
Guilherme Rambo
Pois eh, como o camarada acima disse, eh necessário se habituar à frameworks... Mas tenho duas duvidas: Como utilizar o framework num server q naum esteja no mew pc, numa hospedagem? e outra: TUdo isso soh pra escreve Hello Word na tela o.O?
JOSÉ ALEX PONTES MARTINS
Júlio, parabéns pela matéria, acompanho a muito tempo seu trabalho, é de muita qualidade.
Mas parece que algumas coisas vem mais pra complicar do que pra ajudar, agente se 'especializa' em uma determinada metodologia de trabalho mas logo vem outra!! Fica a pergunta, como vc programa em php, vc usa bibliotecas próprias, vc usa algum framework, gostaria de saber como vc se organiza no momento de programar, abraço.
Tiago Post
Olá! Realmente muito bom o artigo.
Ao que me parece, todos estão falando das novidades adivindas do PHP 5, mas, e quem ainda tem que trabalhar com PHP 4, devido ao servidor? Estas novas ferramentas não estão disponíveis para nós, meros mortais?
Todos falam em Design Patterns, mas não estou conseguindo achar informações para dominar realmente estas técnicas. Acredito que este tal framework seja algo relacionado a isto. Posso usar design patterns em PHP 4? Se sim, onde posso encotrar mais materiais relevantes sobre o assunto?
richard ghizzoni
muito bom! só faltou uma comparação com os diversos frameworks existentes, fica ai minha dica pra uma próxima coluna.
Breno Oliveira
Olá pessoal, bom quem ainda trabalha com o php 4 tem mesmo q usar outros framework's como cakephp.
para quem ainda naum consegue utilizar pois está na net ... dá pra usar sim é só naum colocar dentro do public_html ou htdocs ..
Odenis Lima da Silva
Boa tarde....
fiz o teste aqui e deu erro
Warning: include(Zend.php) [function.include]: failed to open stream: No such file or directory in C:\Paginas\index.php on line 2
Warning: include() [function.include]: Failed opening 'Zend.php' for inclusion (include_path='c:/zf/library') in C:\Paginas\index.php on line 2
Fatal error: Class 'Zend' not found in C:\Paginas\index.php on line 4
<?
include 'Zend.php';
Zend::loadClass('Zend_Controller_Front');
Zend::loadClass('Zend_View');
$view = new Zend_View;
$view->addScriptPath('c:/framework/exemplo01/views');
Zend::register('view', $view);
$controller = Zend_Controller_Front::getInstance();
$controller->setControllerDirectory('c:/framework/exemplo01/controllers');
$controller->dispatch();
?>
alguem pode me ajudar
José Ricardo Mendes Castro
Muito esclarecedor a matéria. Sou programador PHP a 3 anos e sempre tive vontade de utilizar algum Framework para aumentar minha produtividade mas sempre foi um tabú pra mim esses Design Patterns.
A minha dúvida é na questão da configuração no servidor web. Se meu site/sistema estiver hospedado na web e eu não estiver acesso as configurações do apache, como prosseguir?
Amigo,
eu preciso mudar o path de todos os includes no zend?
Se eu não mudo ele dá erro...Fiz exatamente o que você pediu
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.