A nova versão do Zend Framework (1.8) permite fazer as configurações principais da aplicação de uma maneira diferente das outras versões. Até a versão 1.7 não existia um padrão de bootstrapping e cada um fazia do jeito que achar melhor. Acredito que para incentivar os desenvolvedores a seguir um padrão de bootstrapping, a Zend criou classes de inicialização – bem práticas, por sinal – que auxiliam nas configurações necessárias do projeto.
Neste post mostrarei como é feito as principais configurações (View, Modulos, IncludePath e etc…) utilizando a nova versão do poderoso Zend Framework 1.8. Para isso, criarei um novo projeto no eclipse chamado Tests no localhost.
A primeira coisa a ser feita é criar as pastas e arquivos do projeto, como segue a imagem a baixo:

Esta é a estrutura que gosto de usar, mas como o ZF é bem flexível, você pode organizar da maneira que achar mais conveniente. Neste caso, para acessar a aplicação, a url seria: http://localhost/Tests/httpdocs.
Criado os diretórios colocaremos “conteúdo” nos arquivos para iniciar a aplicação. O primeiro arquivo arquivo a ser editado é o .htaccess que reescreve as url’s de modo que todo acesso ao projeto seja redirecionado para o arquivo index.php.
SetEnv APPLICATION_ENV development
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Neste momento, qualquer acesso à url http://localhost/Tests/httpdocs/ será redirecionado para o arquivo index.php. Para testar, digite qualquer coisa depois de httpdocs. Se não der erro de página não encontrada, é porque você está no caminho certo.
O próximo passo é criar o arquivo index.php que definirá o ambiente que o a aplicação será rodada.
<?php
/**
* Define o diretorio onde a aplicacao esta rodando.
* Se não tiver definido anteriormente, define usando realpath(dirname(__FILE__) . '/../application').
* O resultado será C:\<caminho_para_localhost>\Tests\application
*/
defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application') . DIRECTORY_SEPARATOR);
/**
* Define o ambiente da aplicacao.
* Assume 'production' como ambiente padrao se a variavel APPLICATION_ENV nao tiver sido setada
*/
defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
//Zend_Application
require_once 'Zend/Application.php';
/**
* Cria uma instancia de Zend_Application passando o ambiente e o caminho para o arquivo de configuracoes.
* Este componente irá automatizar algumas configurações definidas no config.ini
*/
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . 'config/config.ini'
);
//Faz as configuraçoes basicas (Views, Layout, DB, ...)
$application->bootstrap();
//Inicia efetivamente a aplicacao. Neste momento é dado o dispatch para instanciar os controllers e chamar os actions
$application->run();
Para setar variáveis de ambiente no Windows basta pressionar as teclas Window+Pause para a abrir a janela de propriedades do computador. Vá na guia Advanced/Avançado clica botão Environment Variables/Variáveis de Ambiente. Na próxima tela, acrescente a variável APPLICATION_ENV no grupo de System Variables/Variáveis de Sistema com o valor ‘development‘. Para não perder o costume, reinicie o computador. Uma alternativa seria setar a variável no .htaccess, igual ao citado anteriormente.
Agora teremos que criar a classe Bootstrap para iniciar as configurações básicas. Por padrão, o ZF consegue configurar algumas coisas como conexão com banco, diretorios dos modulos/controllers e etc apenas lendo o config.ini. Eu prefiro colocar no config.ini tudo aquilo que varia de ambiente para ambiente, configurando o restante na classe Bootstrap.
Um dos grandes benefícios desta classe é a inteligência para chamar os métodos de inicialização. Todo método iniciado por _init da classe Zend_Application_Bootstrap_Bootstrap será chamado, assim fica mais organizado o bootstrap onde cada método configura somente uma parte do projeto. No exemplo abaixo, criei somente o método _initFrontController para informar ao dispatcher onde está as pastas com os módulos. Nos próximos posts, mostrarei outras configurações como BD, View, IncludePath e etcs….
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
/**
* Configura o objeto FrontControoler. *
* @return Zend_Controller_Front
*/
protected function _initFrontController()
{
$front = Zend_Controller_Front::getInstance();
$front
->addModuleDirectory(APPLICATION_PATH . 'modules')
->setDefaultModule('default');
return $front;
}
}
Para o exemplo, defini a pasta modules como o diretorio que conterá todos os modulos do projeto. O Zend automaticamente lê cada diretório de ‘modules’ como sendo um módulo do projeto.
Agora criaremos os controller, actions e views para fazer a renderização. Edite o arquivo IndexController.php e implemente a classe IndexController como abaixo:
class IndexController extends Zend_Controller_Action
{
/**
* Irá renderizar o arquivo view/scripts/index/index.phtml
*
*/
public function indexAction()
{
}
}
Código do script index.phtml
<h3>Hello World</h3>
Neste momento, ao acessar http://localhost/Tests/httpdocs, você deverá ver uma página com o texto Hello World. No próximo post, mostrarei como configurar o banco de dados e o Zend_Layout, ótimo componente para utilização do MVC.
Abraços.
#1 by Mateus at May 22nd, 2009
Muito bom Tales,
É muito legal ver o Zend evoluindo, e deixando na mão dos desenvolvedores mais funcionalidades.
Aguardo os próximos artigos.
#2 by Tales at May 22nd, 2009
Isso aí Mateus, Zend a cada release lançada nos surpreende com suas funcionalidades.
#3 by Andre at June 17th, 2009
Cara, até que enfim achei alguém com artigos decentes em relação ao zend framework, quando terá mais ensinamentos?Espero que seja logo…………
#4 by Harlley at June 18th, 2009
Bacana o artigo cara. Só pelas categorias do seu blog, vi que trabalha com as mesmas tecnologias que eu, Zend e jQuery. Já adicionei seu feed. Qual seu twitter? @harlley
#5 by Giolvani at July 2nd, 2009
legal Tales…
muito bom seu tuto sobre bootstrap…
mas cara, como fazer para acessar nossa aplicacao como
http://localhost/Tests/
ao invés de
http://localhost/Tests/httpdocs
e outra dúvida que creio que muitos leigos como eu tem, como fazer uma estrutura para backend com zend…
se puder nos ajudar…
abs
#6 by Tales at July 4th, 2009
Olá Giolvani,
faço com essa estrutura por segurança mesmo. Todos os arquivos abertos (imagens, css, js e etc…) ficam na pasta httpdocs. A pasta application fica no mesmo nível de httpdocs, fazendo com que a mesma fique fora do apache.
Mas para você fazer testes locais, tente usar alias no apache ( http://psmatias.wordpress.com/2007/04/29/configurar-alias-no-apache-2/ ). Mas faça bastante testes utilizando alias com o Zend Framework pois já vi alguns desenvolvedores tendo problemas na utilização dos dois.
A sua outra dúvida eu não entendi direito. Você quer saber uma estrutura de pastas para utilizar com o Zend Framework??
Abraços!
#7 by neto at July 14th, 2009
Olá Estou tendo dificuldades… Sou Novato neste assunto e gostaria de uma ajuda.
Fiz o q vc explicou no site. e aparece a seguinte mensagem…
Fatal error: Uncaught exception ‘Zend_Config_Exception’ with message ‘parse_ini_file(C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\Tests\application\config/config.ini) [function.parse-ini-file]: failed to open stream: No such file or directory’ in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\Tests\httpdocs\Zend\Config\Ini.php:184 Stack trace: #0 C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\Tests\httpdocs\Zend\Config\Ini.php(125): Zend_Config_Ini->_loadIniFile(‘C:\Arquivos de …’) #1 C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\Tests\httpdocs\Zend\Application.php(320): Zend_Config_Ini->__construct(‘C:\Arquivos de …’, ‘development’) #2 C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\Tests\httpdocs\Zend\Application.php(78): Zend_Application->_loadConfig(‘C:\Arquivos de …’) #3 C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\Tests\httpdocs\index.php( in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\Tests\httpdocs\Zend\Config\Ini.php on line 184
Utilizei a Versão zend 1.8. e fiquei na dúvida sobre o que colocar no arquivo config.ini
#8 by Flávio at July 19th, 2009
Parabens tales , gostaria de saber quando irá ter mais tutoriais referentes ao novo Zend 1.8 pois estou iniciando no Zend , e o seu tutorial foi o melhor que encontrei !! Pois não há muita documentação na Web do novo modelo e nem em português …
#9 by Tales at July 24th, 2009
Olé Neto,
pelo mensagem de erro que está aparecendo – “parse_ini_file(C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\Tests\application\config/config.ini) [function.parse-ini-file]: failed to open stream: No such file or directory” – o Zend não está encontrando o arquivo config.ini. Confira se realmente o arquivo existe no diretório C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\Tests\application\config/config.ini.
Sobre o que colocar no arquivo config.ini vai depender da sua necessidade. Basicamente, eu coloco informações que podem variar de ambiente para ambiente: constantes, banco de dados, routers e etc.
Abraços.
#10 by BOb at September 20th, 2009
Legal
#11 by Tales at October 1st, 2009
Obrigado Bob
#12 by Milton Sylvio at October 4th, 2009
Olá Tales!
Excelente tutorial!
Me tira duas dúvidas:
- Como eu faço no caso de ter dois modulos (defalt e admin)?
- E como ficariam a(s) pasta(s) models?
Abs!!!