Organizando o projeto!


Depois de levantar os pontos principais do projeto, no primeiro post, chegou a hora de começar a desenvolver o projeto, e tudo começa com um pouco de leitura e entendimento do zend framework, e no que ele pode facilitar o desenvolvimento do projeto. Quero ressaltar que não pretendo abordar o básico de modelo MVC e outros padrões. Se alguém achar necessário me manda um e-mail e enviar com o maior prazer alguns links sobre esses assuntos.

O ponto inicial de estudo foi o guia de referencia do framework, http://framework.zend.com/manual/en/, parece que tem um pessoal se dedicando a tradução em português do Brasil (se alguém quiser colaborar acesse esse endereço: http://framework.zend.com/wiki/display/ZFDEV/Brazilian+Portuguese), por enquanto estou seguindo essa versão em inglês mesmo, o manual aparentemente esta completo, porém, senti falta de mais detalhes e exemplos, alguma coisas ficam meio confusas a primeira vista e não é raro as vezes que você precisa ler 2 ou 3 vezes um capitulo inteiro para compreender o funcionamento de algumas coisas. Por isso acho que alguns exemplos facilitariam a compreensão.

Agora falando em códigos, o primeiro passo foi definir a estrutura da aplicação, como sendo este um projeto de estudo, optei por fazer o básico, sem módulos, tudo dentro do modulo “default” do framework. E assim ficou organizado:

../
../application
../application/core
../application/default/controlers
../application/default/models
../application/default/views
../html
../html/images
../html/scripts
../html/styles
../html/index.php
../html/.htaccess
../library

No diretorio “application”, que deve ser mantido fora do “document_root” por questões de segurança, e onde ficará todo o código do projeto.

No diretorio “application/core” vão ficar algumas classes, como a classe de validação e outras, que não cabem em outro lugar nessa estrutura, com isso também, a medida que o projeto cresce, e que poderá ser acrescentado algum modulo, é possivel re-utilizar esse codigo e a organização das classes de negocio fica legal. Ficaria estranho, ao meu ver, o modulo “blog” por exemplo, chamar a classe validação de dentro do modulo “default”. Apenas uma questão de organização e estética :)

No diretório “html”, além das imagens, folhas de estilo e javascript, tem o arquivo “index.php” que é responsável pelo “dispatch” das requisições. Quando eu falar em arquivo de “bootstrap” é desse arquivo que estou falando. Também teremos um arquivo “.htaccess” que contém algumas regras de re-escrita de url, para que tudo seja direcionado ao bootstrap, assim, a aplicação possui um único ponto de entrada, uma das premissas do modelo MVC.

Todas as configurações devem ser inicializadas no bootstrap, para isso vamos criar um arquivo “config.php”, que vai conter algumas informações para inicializar a aplicação, diretórios para o “include_path”, configurações do banco de dados.

E por ultimo, no diretório “library” e onde ficam todos os códigos do zend framework, simplesmente descompactando o arquivo ali dentro.

Acredito que com essa explicação, você já tenha uma noção de como organizar o seu projeto com zend framework. E apartir de agora, vamos começar a ver códigos mesmo.

Começamos então pelo “.htaccess” que é bem simples, por enquanto, provavelmente terei que fazer alguma modificação posterior:


RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

Isso significa que qualquer coisa digitada na url, que não seja “.js”, “.ico”, “.gif”, “.jpg”, “.png” ou “.css” vai redirecionar para o index.php (nosso bootstrap).

E agora o index.php (bootstrap):

<?php
/**
* @author Andre de Castro Zorzo <andre_zorzo@NOSPAM.yahoo.com>
* @version
*/
set_include_path('.' . PATH_SEPARATOR . '../' . PATH_SEPARATOR . '../library' . PATH_SEPARATOR . './application/default/models/' . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Db.php';
require_once 'Zend/Config.php';
require_once 'Zend/Config/Xml.php';
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Registry.php';
require_once 'Zend/Session/Namespace.php';
require_once 'Zend/Auth.php';
/**
* Setup database
*/
if (!Zend_Registry::isRegistered('db')) {
$config = new Zend_Config_Xml('../setup/config.xml', 'production');
$db = Zend_Db::factory($config->database);
Zend_Registry::set('db', $db);
$db->getConnection();
}
/**
* Setup controller
*/
$controller = Zend_Controller_Front::getInstance();
$controller->setControllerDirectory('../application/default/controllers');
$controller->throwExceptions(true); // XXX deixar ligado apenas enquanto estiver desenvolvendo
$controller->dispatch();
?>

O primeiro passo nesse arquivo, como comentei anteriormente, é indicar os caminhos das bibliotecas e outros códigos, na sequência, estou incluindo algumas classes, definimos o “setup” do banco de dados, definimos o “setup” do front controller e fazemos o dispatch.

No próximo post eu explicarei brevemente o uso do Zend_Config, Zend_Config_Xml, Zend_Registry e Zend_DB::factory.

2 Comments »

  1. Projeto URLcurta! » Um pouco sobre Zend_DB::factory, Zend_Config e Zend_Registry said,

    May 1, 2008 @ 3:05 pm

    […] Continuando o post sobre “Organizando o Projeto“. […]

  2. Projeto URLcurta! » Zend_Controller said,

    May 14, 2008 @ 8:55 pm

    […] inicio de tudo já foi até explicado superficialmente no post sobre a organização do projeto, tudo começa na estrutura, por isso, vou apenas copiar algumas partes que foram descritas lá. […]

RSS feed for comments on this post · TrackBack URI

Leave a Comment