Seções iMasters
Desenvolvimento + PHP + Zend Framework

Criando um projeto com Zend Framework

No artigo sobre Comparativo entre CodeIgniter e Zend Framework, também publicado aqui no iMasters comparei os dois frameworks de desenvolvimento em PHP com os quais eu mais trabalhei e tenho mais experiência, como disse o CodeIgniter não vem sendo atualizado com freqüência e deixou de ser uma boa alternativa para desenvolvimento de aplicações de grande porte com PHP, por isso passei a usar cada vez mais o Zend Framework.

Artigos sobre como começar com Zend Framework podem ser encontrados aos montes pela internet, posso citar aqui alguns, como o tutorial Getting Started with Zend Framework publicado por Rob Allen, que talvez seja o mais famoso deles, e outros como Zend Framework Tutorial SeriesComo Criar Um Projeto Usando O Zend Tool do Zend Framework ou Zend – Início, cada um deles com uma ênfase e abordagem diferente, e alguns já desatualizados por conta da velocidade de atualizações do próprio framework.

Mas se já existem tantos assim, por que escrever mais um? Bom, meu intuito com esse artigo é proporcionar uma abordagem mais simples que as frequentemente mostradas, que existem diferentes formas de montar a estrutura do seu projeto com Zend Framework, e que esteja atualizada com a versão 1.11.x do Framework (a versão estável mais recente até esse momento, em março de 2011).

Instalação do Ambiente

Antes de iniciar o desenvolvimento de aplicações com Zend Framework, vou presumir que você já tenha alguma experiência com PHP, e também que tenha um ambiente de desenvolvimento com um servidor web (preferencialmente apache) funcionando com php. Um banco de dados instalado não é obrigatório, mas será necessário para construir aplicações maiores com acesso a dados.

Caso você não tenha esse ambiente preparado, você poderá instalá-los individualmente indo aos sites da Apache Foundation e do PHP, além do site do seu banco de dados de preferência, e baixar as últimas versões dos softwares e instalá-los. Além dessa forma existem alguns pacotes prontos com todas essas aplicações para você realizar uma única instalação, um desses pacotes é o Zend Server, que já inlcui o Zend Framework, no site da Zend.

Download do Zend Framework

Se você realizou a instalação do Zend Server como dito acima, o download e instalação do Zend Framework já foi realizado junto com ele, caso contrário você deve ir a Página de Downloads do Zend Framework e baixar preferencialmente o Full Package, você baixará um arquivo compactado contendo a pasta bin, onde está o zend tool, a pasta library onde estão de fato os arquivos do framework, e diversas outras pastas contendo exemplos e bibliotecas de terceiros que não são relevantes para esse artigo.

Criação da Estrutura de Diretórios do Zend Framework


Fig. 1 – Estrutura de Diretórios do Zend Framework

O Zend Framework permite que você crie praticamente qualquer estrutura para armazenar os arquivos que de fato compõem sua aplicação. Na minha opinião isso mais dificulta do que facilita o aprendizado com Zend Framework, pois o desenvolvedor iniciante, na biblioteca, fica meio perdido com relação a como montar a melhor estrutura para trabalhar com o framework. Felizmente para isso existe uma estrutura recomendada pela Zend (fig 1) e é utilizando essa estrutura que vamos trabalhar nesse tutorial.

Existem diversas formas de se criar essa estrutura, cada uma delas mais fácil que a outra, mas que vão depender das ferramentas que você está utilizando.

Zend Tool

O primeiro modo de criar a estrutura de diretórios do Zend Framework e utilizando o Zend Tool, caso você não tenha configurado seu ambiente com Zend Server, antes de utilizar o Zend Tool, você deverá copiar os arquivos do Zend Tool que estão localizados na pasta bin, juntamente com os outros arquivos baixados do Zend Framework, para a pasta de arquivos binários dentro da sua instalação do PHP.

No caso de ambientes Linux e Unix essa pasta geralmente está localizada em um dos seguintes caminhos:

  • /usr/bin
  • /usr/local/bin
  • /usr/local/ZendServer/bin/
  • /Applications/ZendServer/bin/

No caso de ambientes Windows essa pasta geralmente está localizada em um dos seguintes caminhos:

  • C:PHP
  • C:Program FilesZendServerbin
  • C:WAMPPHPbin

Caso você tenha instalado o Zend Server isso já foi feito automaticamente junto com a instalação

Agora que o  Zend Tool já foi instalado no sistema e adicionado como uma variável path, tudo que você terá que fazer para criar a estrutura de diretórios para o Zend Framework é abrir seu console, ou prompt de comando navegar até a pasta onde deseja criar a estrutura de diretórios (isso pode variar entre Windows, Linux e MacOS e pode exigir um pouco de conhecimento em linha de comando, mas não tão complicado assim) e digitar o comando a seguir substituindo nome-do-projeto pelo nome do seu projeto:

zf create project nome-do-projeto

Por fim você deve verificar se a pasta Zend foi copiada para dentro do diretório library criado pelo comando acima, caso ela tenha sido copiada já está tudo certo, caso contrário basta copiá-la de dentro do diretório library, incluido junto com o Zend Framework que você havia baixado e descompactado. Você também pode copiar essa pasta para dentro do include_path do seu PHP, e com isso poderá utilizar o Zend Framework em vários projetos sem ter que copiá-lo para cada um deles.

Zend Studio

Outra forma de criar a estrutura de diretórios necessária para se desenvolver com Zend Server é utilizando o Zend Studio, o Zend Studio é uma IDE de desenvolvimento baseada em eclipse e desenvolvida pela própria zend e pode ser adquirida na página do Zend Studio. Após adquirir e instalar o Zend Studio tudo que você precisa fazer é clicar em File->New->Zend Framework Project, preencher o campo nome com o nome do projeto e clicar em “Finish”. Basicamente o que a ferramenta faz é chamar o zend tool, que foi instalado juntamente com ela, e executar o mesmo comando do item anterior, mas dessa forma você não precisa saber absolutamente nada sobre linha de comando ou configuração de variáveis de sistema.

Manualmente

Para realizar a criação da estrutura manualmente você precisará criar toda a estrutura de pastas manualmente, conforme mostrado na figura 1 acima e alterar quatro arquivos, o primeiro deles o arquivoindex.php localizado no diretório public incluindo a seguinte seqüência de código:

<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);

$application->bootstrap()
->run();

Esse é o arquivo que irá iniciar a sua aplicação,e basicamente o que ele faz é configurar onde estão todos os diretórios e arquivos necessários para iniciar sua aplicação, configurar o ambiente e iniciar a aplicação de fato.

O segundo é o arquivo bootstrap.php no diretório application com o seguinte código:

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

}

Esse arquivo é o arquivo de Bootstrap da aplicação, nele você poderá incluir basicamente tudo que for necessário para ser inciado juntamente com a aplicação.

Repare que em nenhum dos dois arquivos a tag PHP é fechada, isso é feito propositalmente para evitar o envio de informações para o navegador.

Além disso você deve alterar o arquivo application.ini dentro do diretório config com a seguinte informação:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

Esse é o arquivo de configuração da sua aplicação, ele prevê a existência de quatro tipos de ambientes distintos, o ambiente de desenvolvimento, teste, revisão e produção, variando exclusivamente no modo como eles exibirão as mensagens de erro do sistema.

Por último você deve criar (caso não exista) um arquivo chamado .htaccess no diretório public e incluir o seguinte conteúdo:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Esse arquivo é responsável por direcionar todas as requisições ao servidor naquele diretório e nos diretórios abaixo deles para o arquivo index.php exceto se essa requisição seja feita a um arquivo válido e existente em um desses diretórios, isso permite que você possa armazenar imagens, folhas de estilo, arquivos javascript, além de outros, dentro do diretório public e consiga acessá-los normalmente, mas que qualquer outra requisição, que não seja feita a algum desses arquivos, será enviada ao index.php para ser tratada.

Para que esse arquivo funcione e conseqüentemente o restante da sua aplicação, o seu servidor web deve estar configurado para aceitar module rewrite, caso não esteja, procure na documentação referente a ele como realizar essa configuração.

Conclusão

Como você pode perceber o objetivo desse artigo foi mostrar as diversas formas que existem de configurar os diretórios iniciais para se trabalhar com Zend Framework. Agora você deve escolher o que mais lhe agrada e se adapta com as ferramentas que você utiliza e pode começar a desenvolver suas aplicações com o framework.

Você pode baixar os arquivos usados nesse tutorial, você fará o download de um arquivo compactado contendo toda a estrutura de diretórios do Zend Framework juntamente com os arquivos que você criaria utilizando o processo manual e que são criados automaticamente pelos outros dois processos. Caso utilize esses arquivos ainda será necessário copiar a pasta Zend para dentro do diretório library que não foi incluída com esse arquivo.

Mensagem do anunciante:

Torne-se um Parceiro de Software Intel®. Filie-se ao Intel® Developer Zone. Intel®Developer Zone

Comente também

7 Comentários

STIVY WENDERSON

Muito bom o post..Se não fosse ele eu não teria conseguido utilizar pela primeira vez o Zend Framework…É uma coisa nova Espero aprender a utilizá-lo
Só acho q tem um pequeno erro ai passei a noite toda aki e a página so dava um erro “500”

Notei que a última linha da index.php tinha esse botstrap chamando o método rum.
$application->bootstrap()->run();

Acabei adicionando cegamente este método na classe BootStrap
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
public function run(){}
}

funcionou mas ainda estou com uma impressao que isto não é certo…gostaria que alguem me retornase algo…Obrigado

STIVY WENDERSON

É eu boiei…
Esta mesmo errado
Retirei o método da classe Bootstrap
e verifiquei se o metodo existia..e obtive um retorno positivo.

if( method_exists ($application->bootstrap(),’run’)) echo “Existe”;

E agora? Me laskei?
Alguem poderia me ajudar?
Obrigado
stivyw@gmail.com

Paulo R. B. Rocha

É muito fácil resolver isso: use o CodeIgniter ou outro framework mais fácil!!

eu

seu post foi totalmente copiado, falta de criatividade…..ohh coitado…

Jeferson

Povo inútil fazendo comentários inúteis. Se não tem nada pra comentar fecha a janela ou abre outra página, vai brincar de boneca sei la…
Isso aqui é informação e copiado ou não está sendo muito útil !

Stivy Wenderson

Realmente, estamos aqui pra tentar aprender algo…:) Paulo R. B. Rocha, já utilizo Code Igniter, mas meu objetivo seria aprendizado ao ZF. Muito obrigado pela ajuda.

FRANCISCO

OTIMO POST, POIS SO COM ESSE TUTORIAL DEU CERTO

Qual a sua opinião?