Arquivo

Arquivo da Categoria ‘Zend Framework’

Zend Framework – Introdução (pt 1)

16, janeiro, 2010 Jonas Martinez 4 comentários

Opa!

Hoje irei iniciar uma série de posts com o intuito de explicar o funcionamento do Zend Framework, que na minha opinião é o melhor framework atual para PHP.

Primeiramente, você deve saber o porque utilizar um framework, o que já expliquei (pelo menos tentei) em um post passado.

O Zend Framework é na minha humilde opinião o melhor pois se trata de um framework com baixa dependencia entre componentes e que pode ser usado tanto como biblioteca funcional como um robusto sistema no padrão MVC, além de integrar toda a infra-estrutura de serviços da Zend como Zend Studio, Zend Server e outros produtos.

A versatilidade do ZF é incrivel, atualmente existem várias bibliotecas prontas que trazem uma gama enorme de opções para agilizar o desenvolvimento, por exemplo, é possível dar um update no seu Twitter com apenas 2 linhas de código.

A Zend, empresa que cuida da manutenção do PHP e seus projetos, criou várias parcerias para os mais variados fins, dentre eles com a Adobe para criar os componentes AMF, que seriam como servidores para trabalhar de forma completa com o Flash, Flex e AIR ou seja, não é necessário ficar remoendo XML pra lá e pra cá afim de integrar um sistema complexo, o ZF faz isso por você.

Além de tudo isso, temos webservices prontos desde Amazon Cloud, toda estrutura do GData (para Youtube, Google Calendar etc etc [para se ter noção é possivel publicar um vídeo remotamente no Youtube sem mto esforço]) passando por Nirvanix (CDN), Yahoo, Flicker etc, se já não bastasse, é atualizado constantemente.

Bom, chega de lero lero, vamos ao que interessa.

Particularmente, utilizo toda a infra-estrutura que o ambiente MVC do Zend Framework oferece, o que me facilita a vida em vários aspectos. Considerando que você já conhece bastante de OOP e um pouco de Design Patterns, vamos lá!

Primeiramente, precisamos baixar o ZF, site oficial é http://framework.zend.com e para o download http://framework.zend.com/download/latest.
Como você deve estar pensando, “Full ou Minimal?” te responderei, Minimal e o porquê é bem simples, o Full vem com uma série de exemplos e o pacote completo do Dojo Toolkit um framework javascript, ou seja, nativamente já vem com integração para Ajax e outros recursos bem legais do Dojo mas prefiro trabalhar com jQuery que é mais leve, vai da sua escolha.

Inicialmente vamos descompactar o arquivo para uma pasta, recomendo ter um local especial, pois existe muita atualização.

Como a maioria dos frameworks, o ZF possui uma ferramenta que cria a estrutura básica de um projeto, chamado de Zend_Tool que não deixa de ser uma classe que pode ser customizada para sua necessidade ao criar seus projetos.

Esta ferramenta é bem simples, ela possui a capacidade de criar a estrutura para 1 novo projeto, de controller/model/view/action para 1 projeto e até módulos para projetos.

Iniciaremos o Prompt, através do Iniciar->Executar “cmd” ou simplismente WIN+R “cmd”.

Agora, vamos até “bin” que está na pasta onde descompactamos o ZF e pedimos para criar um novo projeto em uma pasta, como na imagem abaixo.

Criando Projeto com o Zend_Tool - Zend Framework

Criando Projeto com o Zend_Tool - Zend Framework

ps. sempre descompacto na minha pasta especifica dentro da minha estrutura de webserver pois atualizo com frequência.

Neste exemplo, usei a pasta D:\WebServer\www\projetoexemplo para criar meu projeto, agora vamos ver a estrutura inicial criada pelo Zend_Tool.

Estrutura padrão do Zend_Tool - Zend Framework

Estrutura padrão do Zend_Tool - Zend Framework

Bom, como visto ele cria a pasta application, public, library e tests na raiz. A pasta application é onde vai conter os arquivos do MVC, como visto, existem as pastas ‘controller’, ‘models’ e ‘views’. Inicialmente você não consegue trabalhar com módulos na estrutura padrão, é necessário alterar algumas coisas, o que veremos em um próximo post. Por hora, estaria tudo ok, se não fosse pelo seguinte fato, nos hosts brasileiros, a maioria não permite a pasta public_html(www) ou httpdocs acessar pastas anteriores, por questões de segurança. Então nosso “public” seria equivalente a 1 dessas pastas “public_html” ou “httpdocs” dependendo da sua estrutura de servidor (httpdos geralmente é usado em estruturas que usam Plesk, e public_html Cpanel), como você reparou, o public está no mesmo nível de “application” e “library” o que dificultaria as coisas quando nosso script fosse acessar arquivos nessas pastas.

obs: na pasta “public” existe um arquivo .htaccess para rewrite rules usado para url amigavel no qual a IDE que utilizo não está configurada pra mostrar.

Além disso, a pasta library vem vazia, pois é onde você vai colocar as bibliotecas que vai usar e também porque o ZF estima que seu php ta com um include_path dedicado ao ZF o que não é uma realidade comum.

O que costumo fazer é, copiar os arquivos da pasta public (index.php e .htaccess) para a pasta raiz do projeto, criar .htaccess para proteger as pastas application e library que uma vez estando na raiz, ficam vulneráveis, além de remover a tests e copiar toda a library para o library do projeto. Vejamos?

Bom, agora vamos começar a entender como o Zend Framework funciona.

Primeiramente, precisamos ajustar nosso index.php que tiramos da pasta public, para que os caminhos fiquem corretos, após isso vamos ajustar também o application.ini que é o coração do framework onde estão todas as informações de configuração, como paths, senha de banco de dados, configuração do php e outras variáveis.

index.php original

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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();

agora irei alterar algumas linhas, na verdade também adiciono outra, que é a ROOT_PATH, também poderia usar a $_SERVER['DOCUMENT_ROOT'] mas prefiro criar, também troco o APPLICATION_ENV padrão de “production” para “development” pois o Zend Framework permite você carregar configurações dinamicamente, ou seja, ter configurações especificas para ambiente de testes, desenvolvimento e produção ou criar um, veremos mais adiante.
Então, fica assim.

index.php alterado

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
// Define path to root directory
defined('ROOT_PATH')
    || define('ROOT_PATH', realpath(dirname(__FILE__)));
 
// Define path to application directory
define('APPLICATION_PATH', ROOT_PATH . '/application');
 
// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development'));
 
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(ROOT_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();

Bom, agora vamos proteger as pastas library e application colocando um arquivo .htaccess dentro delas.

Arquivo .htaccess

1
2
Order allow,deny
Deny from all

Simples não? Agora só copiar para as pastas library e application.

Agora, faça o upload para um servidor ou rode localmente, acesse e deverá aparecer algo como abaixo:

Página inicial padrão do Zend Framework

Página inicial padrão do Zend Framework

Pronto! você acaba de “instalar” o Zend Framework. Nos próximos posts ensinarei o básico sobre Action/Views e Models além da estrutura modular.

Caso já queira ir tentando, na pasta views constam os arquivos de layout dos actions. Confira no IndexController.php dentro de controllers, crie uma função pública chamada testeAction, igual a indexAction. Vá em views e crie teste.phtml, coloque qualquer coisa e digite http://localhost/projetoexemplo/index/teste onde index é o controller e teste é o action.

Espero ter ajudado, até!

Categories: PHP, Zend Framework Tags: , , ,

Zend_Db e UTF-8

13, novembro, 2009 Jonas Martinez Sem comentários

Dica rápida!
Um dos paramêtros para o Zend_Db é charset! Estava com problemas para exibição de dados UTF-8 do MySql no Zend_Db e descobri que ao criar a instância seja por factory ou por configuração temos a opção de setar charset = utf8, no meu caso ficou

resources.db.params.charset = "utf8"

no arquivo de configuração ;)

Categories: PHP, Zend Framework Tags: , , ,

O que é e porque usar um Framework?

1, novembro, 2009 Jonas Martinez Sem comentários

Já faz um bom tempo tenho trabalhado com o Zend Framework para aplicações PHP e o jQuery para JavaScript, esses dois frameworks simplismente permitiram que eu tenha uma produtividade muito maior e também noto em fóruns muitas pessoas novatas começando com programação e não fazem a mínima idéia de Design Patterns, Framework, UML etc etc…

Hoje vou explicar o que é um Framework, vamos lá!

Imagine que você tem um projeto de um blog, bom naturalmente você precisa de conexão com banco de dados, inserções, alterações, remoções e listagens….

Basicamente você pode pensar “Crio uma classe de conexão com o banco de dados, outra classe com os elemntos como posts, comentários e ta tudo certo!”

Até ai, tudo bem, um simples blog resolve dessa forma mesmo, mas agora imagine que você precisa fazer um sistema de imobiliária, você poderia utilizar a classe de conexão com o banco certo? Pois bem, agora imagine uma infinidade de recursos que você precisa ter, como feeds, categorias, formulários e pra ajudar, vários desenvolvedores, como faria?

Você pode pensar, “Opa! Só fazer uma bibliotera com vários recursos e usá-los!” mas e se eu te disser, esse projeto tem que ser extensivel e flexivel, você realmente saberá fazer?

Para resolver esse tipo de problema, existem os Design Patterns, que são Padrões de Projeto, usados para resolver problemas comuns em todos os projetos. São práticas eficientes e testadas ao longo de anos, que com o tempo acabam se fundindo criando outros nomes e outras técnicas, cada uma tem sua vantagem e vale lembrar que um bom projeto tem vários padrões trabalhando juntos para proporcionar uma arquitetura extremamente dinâmica, extensivel, flexivel e de fácil manutenção.

Mas e os Frameworks?
Bom, um framework nada mais é do que uma arquitetura “padrão” que fornece várias ferramentas comuns a todo tipo de projeto, utilizam os mais variados tipos de padrões de projeto para proporcionar um ambiente de desenvolvimento extremamente produtivo.

Muitos confundem Framework com Biblioteca de Classes, não é assim!

Bibliotecas são apenas bibliotecas, fornecem vários recursos independentes que as vezes fica dificil interagirem entre si, já um Framework, além de fornecer vários recursos como biblioteca, proporciona todo um ambiente padronizado, que, uma vez seguido de acordo fica sendo extremamente produtivo com o re-uso de muitos trechos de código, evitando torrar a cabeça a cada projeto.

A maioria dos Frameworks trabalham com um padrão principal, o MVC (Model View Controller) que tem como base trabalhar com Modelo Lógico – Visualização – Controle, ou seja, separa claramente o Design do Conteúdo e Lógica.

Sendo assim, você terá um ambiente para fazer a visualização do projeto, outro para a lógica do projeto e outra para o controle do projeto, onde o Controle junta a Lógica e a Visualização.

Além do padrão principal, também aplica os mais variados padrões para casos especificos, um exemplo clássico é o Banco de Dados, geralmente utilizado no padrão Singleton.

As vantagens de se usar um Framework são:

  • Padronização de processos
  • Uso constante das boas práticas de desenvolvimento
  • Enorme gama de recursos disponiveis
  • Re-uso de código
  • Flexibilidade e Extensibilidade dos projetos
  • Fácil manutenção
  • Produtividade

Porém para se chegar a um nível satisfatório do bom uso de um Framework precisamos:

  • Conhecer a fundo a linguagem que utilizamos
  • Dominar Orientação a Objeto (uma vez que OO é uma técnica de programação muito eficiênte e em evidência a anos)
  • Conhecer os padrões de projetos
  • Usar boas práticas de desenvolvimento (comentar, encapsular, fechado para alteração mas aberto para extensão etc)
  • Estudar o Framework e entender sua essência.

Estes tópicos eu elaborei baseado na experiência que tenho, caso discorde faça seu comentário que será bem vindo!
Quando digo conhecer a linguagem a fundo, é que não adianta querer usurfruir do Framework sem saber realmente o que ele fornece, conhecendo a linguagem a fundo você saberá quando usar as ferramentas do Framework, evitando uma dúvida do tipo “essa função é do framework ou da linguagem?” ou “posso fazer isso nativamente ou reinvento a roda?”.

Já dominar orientação a objeto, creio ser necessário para criar projetos concisos e flexiveis, aproveitando o re-uso e a fácil manutenção além da extensão.

Ao conhecermos os padrões de projetos abrimos nossa mente para soluções “mágicas”, ou seja, treinamos nossa cabeça para pensar corretamente nas mais variadas situações.
Utilizando as boas práticas, permitimos que nosso código seja de fácil compreensão por outros desenvolvedores e também para nós mesmos, afinal, é dificil lembrar exatamente milhares de linhas de código… E finalmente, estudando o Framework, sabemos o que ele realmente faz e não faz, facilitando o entrosamento de nosso conhecimento de padrões de projetos e OO, tornando um projeto maravilhoso.

Querem um bom exemplo de Framework e Projeto Maravilhoso? Bom no mundo PHP, linguagem para web muito utilizada, temos o Zend Framework como ótimo exemplo e o Magento, projeto e-commerce com uma arquitetura excepcional, feita com Zend Framework.

Para mais informações acesse:

Bom to caindo de sono, por enquanto é isso! qualquer dúvida deixe seu comentário! abraços!