Bootstrapping Zend Framework 1.8


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:

post-zend-181

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. #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. #2 by Tales at May 22nd, 2009

    Isso aí Mateus, Zend a cada release lançada nos surpreende com suas funcionalidades.

  3. #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. #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. #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. #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. #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. #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. #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. #10 by BOb at September 20th, 2009

    Legal

  11. #11 by Tales at October 1st, 2009

    Obrigado Bob

  12. #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!!!

(will not be published)
  1. No trackbacks yet.