Instalar e configurar o ZendFramework no Debian

Publicado: 15/12/2011 em Linux, Programação
Tags:, , , ,

Zend Framework é um framework para aplicações Web de código aberto, orientado a objetos, implementado em PHP 5 e licenciado como New BSD License. Zend Framework—freqüentemente referido como ZF—é desenvolvido com o objetivo de simplificar o desenvolvimento web enquanto promove as melhores práticas na comunidade de desenvolvedores PHP.

1. Instalar o Apache, PHP5 e MySQL

Primeiramente, instalar os pacotes necessários para se ter um servidor Web PHP funcionando. Em outro post já descrevemos este procedimento. Não vamos aqui tecer maiores detalhes novamente. Faça uso do seguinte comando:

# # apt-get install apache2 apache2-utils php5 php5-cli mysql-server-5.0 php5-mysql -y

Agora verifique se o Apache está funcionando: acesse com o navegador a URL http://localhost

Caso seja visualizada uma página do tipo “It Works”, o servidor Apache está funcionando.

Para verificar o funcionamento do PHP, crie um arquivo /var/www/index.php com o seguinte conteúdo:

<?php
phpinfo();
?>

Agora acesse o endereço http://localhost/index.php . Se as informações de configuração do PHP aparecerem, isto significará que o Apache e o interpretador PHP estão funcionando. Uma listagem semelhante a abaixo deve ser visualizada.

Tela da saída index.php

Para funcionar, o ZendFramework necessita que esteja instalada a biblioteca de abstração de banco de dados ADOdb. Essa biblioteca é que permite que o código que se escreve seja portável a diversos bancos de dados. Isso pode ser facilmente realizado através do Synaptic, ou através do comando:

# apt-get install libphp-adodb

Para entender a importância desta biblioteca, veja o exemplo abaixo:

<?php
include(‘libs/adodb.inc.php’);
# fazendo a conexão ao MYSQL
# (servidor, usuario, senha e banco)
$DB = NewADOConnection(‘mysql’);
$DB->Connect(‘localhost’,’albuquerque’,’minhasenha’, ‘meu_banco’);
?>

Assim, conecta-se ao banco MySQL.  Para mudar para uma base PostgreeSQL, basta trocar:

de:
$DB=NewADOConnection(‘mysql’);
para:
$DB=NewADOConnection(‘postgres’);

2. Verificar os pacotes instalados
Verifique se os pacotes básicos foram instalados, antes de iniciar a instalação do ZendFramework. Uma forma simples de realizar isto através da interface gráfica é utilizando o Synaptic. Os seguintes pacotes e bibliotecas devem estar instalados:

apache2
apache2-mpm-itk
apache2-utils
apache2.2-bin
apache2.2.common
libapache2-mod-php5
libapr1
libaprutil1
libaprutil1-dbd-sqlite3
libphp-adodb
php5
php5-adodb
php5-cli
php5-common
php5-mysql
php5-suhosin

3. Baixar o ZendFramework.
O Zend Framework tem uma grande variedade de opções de instalação:

a) usar o canal PEAR;
b) baixar via aptitude (ou Synaptic) a versão do ZendFramework do repositório Debian;
c) instalar a Zend Zend Server Community Edition (CE), que é uma forma agradável e fácil de iniciar o desenvolvimento com Zend Server;
d) baixar a última versão do ZendFramework da própria página oficial do framework, e instalá-la manualmente.

Neste post vamos adotar a última opção acima, ou seja, baixar a mais recente versão do framewotk diretamente da sua página oficial. Para isto, deve-se entrar na página da ZendFramework, na seção download, e escolher o pacote e versão para baixar. Basicamente, existem duas opções para download:

  • Zend Framework Full: pacote completo com todas as ferramentas internas e externas da biblioteca. Aplicativo de linha de comando para Windows e Linux. Além de testes que podem ser executados, estão presentes algumas classes adicionais e o Dojo Toolkit, pacote Javascript utilizado oficialmente.
  • Zend Framework Minimal: pacote contendo todas as classes do Zend Framework e o aplicativo de linha de comando para Windows e Linux. Não encontramos algumas estruturas adicionais, porém esta versão contém todos os arquivos necessários para programação.

Vamos fazer este post utilizando a versão “full”.

Após baixar o arquivo ZendFramework-1.11.11.tar.gz, descompacte o seu conteúdo em /opt através do seguinte comando:

# tar -xvf ZendFramework-1.11.11.tar.gz -C /opt/

Será gerado uma estrutura de diretórios da seguinte forma (obs: use o comando “tree” para isto):

. (/opt)
── ZendFramework-1.11.11
├── bin
│   ├── zf.bat
│   ├── zf.php
│   └── zf.sh
├── demos
│   └── Zend
├── externals
│   └── dojo
├── extras
│   ├── library
│   └── tests
├── incubator
├── INSTALL.txt
├── library
│   └── Zend
├── LICENSE.txt
├── README.txt
├── resources
│   └── languages
├── src
└── tests
├── AllTests.php
├── phpunit.xml
├── resources
├── runtests.sh
├── TestConfiguration.php.dist
├── TestHelper.php
└── Zend

4. Configurar o ambiente
4.1 Variável include_path do PHP

O diretório library, onde o Zend espera localizar todos os seus arquivos, deve estar incluído no include_path. Edite os arquivos /etc/php5/apache2/php.ini e /etc/php5/cli/php.ini nas seções Paths and Directories que fica aproximadamente na linha 780 (dentro da sessão “Paths and Directories”), como no exemplo abaixo:

; UNIX: "/path1:/path2"
include_path = “.:/opt/ZendFramework-1.11.11/library”

4.2 Habilitar módulo rewrite do Apache
Para habilitar o módulo execute o seguinte o seguinte comando:

# a2enmod rewrite

Também é necessário alterar o arquivo /etc/apache2/sites-available/default, na tag <Directory /var/www/> temos o parâmetro AllowOverride com o valor None. Mude-o para All.

4.3 Recarregar as configurações do Apache e do PHP

Use o seguinte comando:


# /etc/init.d/apache2 reload

4.4 Criar alias para usar linha de comando
O ZendFramework vem equipado com uma ferramenta CLI, ou “command line tool” (internamente conhecida como a ferramenta de console), é correntemente a interface primária para “dispatching” solicitações à Zend_Tool.

Para fazer uso desta ferramenta de linha de comando, deve-se criar um alias para o comando zf. Edite o arquivo /etc/bash.bashrc e adicione no seu final a seguinte linha:

alias zf=/opt/ZendFramework-1.11.11/bin/zf.sh

5. Testar o funcionamento do ZendFramework
Feche e abra um novo terminal. Qualquer usuário do sistema pode executar o Zend Framework Command Line Console Tool, basta apenas digitar zf no terminal.

a) Para visualizar qual versão do ZendFramework está instalada, executar o seguinte comando:

$ zf show version

cuja resposta deve ser algo parecido com:

Zend Framework Version: 1.11.11

b) Para que o Zend_Tool possa funcionar, deve ser possível executar o PHP. Para testar execute:

$ php -v

cuja resposta deve ser algo parecido com:
PHP 5.3.3-1ubuntu9.3 with Suhosin-Patch (cli) (built: Jan 12 2011 16:08:14)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

6. Criar um projeto

6.1) Criar área do projeto no ZendFramework:

Vamos criar o projeto dentro de uma pasta na própria área do usuário. Essa pasta será a raiz de nosso servidor virtual a ser criado.  Isto facilitará a criação de arquivos já que o usuário local já terá todas as permissões para manipulação dos mesmos, não necessitando se logar como administrador. Para criar o projeto helloworld execute o seguinte comando:


$ zf create project /home/usuario/helloworld

Após este comando, uma estrutura de diretórios padrão do Zend Framework será criada.  Veja abaixo uma estrutura ideal para se iniciar um projeto (nem todas as pastas foram criadas automaticamente pelo comando acima):
Estrutura de Diretórios para iniciar um projeto.

Vamos analisar esta árvore:

  • Diretório application/: armazena todos os arquivos referentes ao aplicativo. Neste local encontramos toda a programação não visualizável em ambientes externos, ou seja, sua programação PHP. Arquivos como imagens ou que não devem sofrer processamento, como CSS estático, não devem ser armazenados neste local. Ainda neste diretório, vamos armazenar toda a arquitetura MVC, módulos criados, configurações necessárias para inicialização do aplicativo e classes de Bootstrap.
    • Diretório configs/: diretório de configuração da aplicação. Este diretório recebe todas as configurações do aplicativo. O Zend Framework carrega o application.ini em tempo de inicialização, intepretando as informações descritas. Com ele é possível trabalhar com recursos prontos sem programação. Antigamente, se você necessitava conectar ao banco de dados, era necessária a programação manual de conexão no arquivo de inicialização. Hoje, basta inserirmos algumas linhas no arquivo de configuração e todo o tratamento estará disponível, sem nenhuma codificação especial do programador. Este diretório deve armazenar qualquer programação necessária para inicializar o aplicativo, como arquivos XML contendo a estrutura inicial da barra de navegação ou qualquer característica modificável sem a necessidade de inclusão de código PHP.
    • Diretórios controllers/, models/, e views/: estes diretórios servem como os diretórios  default para o controller, model or view. Criar estes diretórios dentro do diretório application/ é o melhor leiaute para iniciar um projeto simples bem como para iniciar um projeto modular que tem controllers/models/views globais. Estes diretórios armazenam as controladoras da arquitetura MVC. As controladoras são as classes que armazenam a manipulação dos dados provenientes dos modelos e envia os processamentos prontos para a camada de visualização. Cada arquivo interno a este diretório deve armazenar somente uma classe de controladora e nomeado com o mesmo nome. Ou seja, caso exista uma controladora de “escolas”, a classe terá nome EscolasController, estendida da Zend_Controller_Action, e o arquivo deverá ser nomeado como EscolasController.php.
    • Diretórios controllers/helpers/: Estes diretórios conterão helpers de ação. Hekpes de ação serão “namespaced” bem como “Controller_Helper_” para o módulo default ou “<Module>_Controller_Helper” de outros modulos.
    • Diretório layouts/: diretório que armazena o formato da aplicação a ser construída, destinado aos layoutes do MVC. Desde que Zend_Layout é capaz de ter laiautes de MVC- e não-MVC-based, a locação deste diretório reflete que os leiautes não são relacionados 1-a-1 com os controladores e são independentes dos templates dos views/.  Participando da camada de visualização, este espaço armazena os templates utilizados para renderização da aplicação, juntamente com a classe Zend_Layout (padrão do ZF). Este diretório deve possuir o mesmo formato do views, descrito a frente. Se vamos utilizar o template layout.phtml em nosso aplicativo, ele deve ser armazenado da seguinte maneira:

    • Diretório modules/: permite ao desenvolvedor agrupar um conjunto de controladores relacionados em um grupo logicamente organizado. A estrutura abaixo deste diretório poderia ser semelhantes a estrutura abaixo do diretório  application/.  Cada módulo deve ser desenvolvido como um aplicativo qualquer, tentando manter o mínimo de dependência entre eles. Ao desenvolver um módulo admin, este deverá receber uma classe de inicialização chamada Admin_Bootstrap, assim como o inicializador do aplicativo descrito a frente. Qualquer classe pertencente a este módulo, deverá possuir o namespace Admin prefixadoEstrutura de Diretórios de modulos.
    • Diretorio views/: a camada de visualização da arquitetura MVC é encontrada no diretório views/. Respeitando esta arquitetura, não se deve desenvolver uma programação além de saída de dados, estruturas de blocos condicionais if-else ou laços de repetição como while for. Os auxiliares da camada de visualização são encontrados no diretório helpers. Já os templates de saída são criados no diretório scripts. Ao criar a controladora de produtos ProdutoController, devemos adicionar o subdiretório scripts/poduto; implementando a ação de listagem de produtos listAction à controladora, vamos incluir o arquivo de visualização scripts/produto/list.phtml. Note que todos os arquivos de saída da camada de visualização devem possuir a extensão phtmlEstrutura de diretorios View.
    • Diretório services/: este diretório é para os arquivos dos web-services da aplicação a ser desenvolvida, ou para implementar um » Service Layer  para seus models.
  • data/: este diretório fornece um lugar para armazenar dados voláteis da aplicação e possivelmente temporários. A perturbação dos dados neste diretório pode fazer com que o aplicativo falhe. Além disso, as informações contidas neste diretório pode ou não estar comprometidas com um repositório de subversão. Exemplos de coisas nesse diretório estão os arquivos de sessão, arquivos de cache, bancos de dados sqlite, logs, arquivos de uploads, índices e todas informações não existentes na instalação do aplicativo e que são gerados durante o seu ciclo de vida..
  • Diretório docs/: este directório contém documentação, tanto o gerado como os de autoria própria.
  • Diretório library/: este diretório é para bibliotecas comuns que a aplicação necessita, e deve estar no include_path do PHP. Os desenvolvedores devem colocar o código da biblioteca da aplicação sob este diretório em um espaço exclusivo, seguindo as diretrizes do guia de nomenclatura estabelecidas no » O manual de nomes do PHP, bem como os estabelecidos pela própria Zend. Este diretório pode também incluir o Zend Framework em si; se for o caso, o programador poderia guardá-lo em library/Zend/.
  • Diretório public/: este diretório contém todos os arquivos públicos de sua aplicação. index.php configura e invoca Zend_Application, que por sua vez invoca o arquivo application/Bootstrap.php, resultando em despachar o controlador frontal. A raiz do seu servidor web normalmente seria definido para este diretório.
  • Diretório scripts/: este diretório contém scripts de manutenção e/ou de instalação do sistema e banco de dados. Estes scripts podem incluir ações através de linhas de comando, cron, ou “phing build scripts” que não são executadas em tempo de execução, mas são parte do funcionamento correto do aplicativo.
  • Diretório temp/: diretório reservado para os dados transitórios do aplicativo. Estas informações não são normalmente salvos no repositório svn do projeto (deve receber a configuração svn:ignore em serviços de versionamento). Se os dados sob o diretório temp/ forem excluídos, o aplicativo deve ser capaz de continuar sendo executado com uma possível diminuição no desempenho até que os dados sejam mais uma vez restaurados ou recarregados.
  • Diretório tests/: este diretório contém testes de aplicação. Estes poderiam ser escritos à mão, baseados no PHPUnit, Zend_Test ou Selenium-RC, ou com base em alguma outro framework de testes.

6.2) Criar domínio zend.localhost no Apache

a) Copiar o conteúdo do arquivo “default” para o arquivo “zendlocal” (que será criado), o qual abrigará as configurações do novo sítio:
# cp /etc/apache2/sites-available/default /etc/apache2/sites-available/zendlocal

b) Editar o arquivo  /etc/apache2/sites-available/zendlocal . Abaixo um espelho do arquivo zendlocal após a sua edição de apontamentos para o novo sitio zend.localhost a ser criado:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName zend.localhost
DocumentRoot /home/usuario/helloworld/public

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

<Directory /home/usuario/helloworld/public>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"

<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>

Observe que com a declaração “AllowOverride All” já estamos preparando o Apache para funcionar com o seu módulo de reescrita.

c) Habilitar o site zend.localhost:
# a2ensite zendlocal

d) Reiniciar o apache com o comando:

# /etc/init.d/apache2 reload

c) Editar o arquivo /etc/hosts caso o navegador esteja sendo executado na própria máquina onde está instalado o Apache. Neste caso, deve ser adicionando a seguinte entrada ao arquivo:

127.0.0.1 zend.localhost

6.3) Testar o funcionamento: com um navegador, constatar o funcionamento do Apache com o ZendFramework conforme nossos dois exemplos abaixo:

a) Digitar na barra de endereços http://zend.localhost

Resultado: uma página em branco deverá ser mostrada.

b) Criar um arquivo chamado /home/usuario/helloworld/public/index.html com um conteúdo simples para teste, tal como este a seguir:
<html>
<title>Testando Zend</title>
<h1>Oi, testando o Zend</h1>
</html>

Ao digital novamente na barra de endereços do navegador http://zend.localhost, será mostrada uma página com o conteúdo “Oi, testando o Zend” .

6.4) Disponibilizar as bibliotecas do Zend

Copiar a pasta Zend(aproximadamente 23MB), que se encontra dentro de /opt/ZendFramework-1.11.11/library/ para a pasta helloworld/library:

usuario@002755:~/helloworld/library$ cp -R /opt/ZendFramework-1.11.11/library/Zend/ .

A estrutura ficará parecida com esta:
. (/helloworld/library)
`– Zend
|– Acl
|– Amf
|– Application
|– Auth
|– Barcode
|– Cache
|– Captcha
|– Cloud
|– CodeGenerator
|– Config
|– Console
|– Controller
|– Crypt
|– Currency
|– Date
|– Db
|– Debug.php
|– Dojo
|– Dom
|– Feed
|– File
|– Filter
|– Form
|– Gdata
|– Http
|– InfoCard
|– Json
|– Layout
|– Ldap
|– Loader
|– Locale
|– Log
|– Mail
|– Markup
|– Measure
|– Memory
|– Mime
|– Navigation
|– Oauth
|– OpenId
|– Paginator
|– Pdf
|– ProgressBar
|– Queue
|– Reflection
|– Rest
|– Search
|– Serializer
|– Server
|– Service
|– Session
|– Soap
|– Tag
|– Test
|– Text
|– TimeSync
|– Tool
|– Translate
|– Uri
|– Validate
|– View
|– Wildfire
`– XmlRpc

6.5) Testes finais após a disponibilização da biblioteca Zend

a) Usando um navegador, acesse o endereço http://zend.localhost, a tela abaixo de boas vindas do ZendFramework será mostrada.

Tela Boas Vindas do Zend

b) Verificar o Roteamento

Para verificar se o roteamento de páginas está funcionando, visite com um navegador um endereço qualquer, interno ao projeto. Vamos visitar uma página inválida do projeto,tal como:
http://zend.localhost/exemplo.html

O roteamento estará funcionando se a página visualizada for um aviso de “An error occurred, page not found”. Caso contrário, o roteamento do projeto não está funcionando, como é caso de se ter no navegador um erro de página não encontrada gerada pelo próprio servidor Web (“Not Found The requested URL was not found on this server“).

7.Mensagem final
Para se ter um ambiente completo para desenvolvimento de aplicações, ainda falta realizar outros procedimentos. Como por exemplo, instalar banco de dados (MySQL, Postgres, …) e criar e configurar o arquivo .htaccess. Mas isto ficará para um outro post. O importante neste momento é que o ZendFramework teve sua instalação e configuração básica realizada com sucesso.

Referências:
1- Guia de Referência do programador ZendFramework
2- Instalar e configurar o ZendFramework
3- Installing Zend Framework under a Debian Linux
4- ZendFramework
5- Introdução ao Zend Framework
6- Instalar servidor LAMP (Linux + Apache + PHP + MySQL) no Debian
7- Instalar e configurar Módulos do Apache2 no Debian
8- Entendendo a Zend Framework

Anúncios
comentários
  1. Thales disse:

    Passei horas e esse tutorial me achou. No meu caso eu precisei adicionar dentro do “” – no arquivo zendlocal.conf do sites-avaliable – o parâmetro “Require all granted”, pois estava apresentando erro 403. Ficando desse modo:

    Options FollowSymLinks
    AllowOverride None
    Require all granted

    Valeu :)

  2. nettu disse:

    Vlw brother … mto boa explicação!!

  3. Cara, a melhor explicação da internet!
    Você deu a base e o detalhamente cabe cda um entender e fazer da sua maneira, foi o que eu fiz, em resumo fiz em 5 passos, mas essa explicação ajudou bastante!

    obrigado mais uma vez, vc ja tava na barra dos favoritos!

Deixe um comentário, pois isto é muito motivante para continuarmos este trabalho

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s