Zend Framework para um PHP mais poderoso
Ajude a Combater o Spam! Clique aqui!
Esse tutorial tem como objetivo mostrar para as pessoas que nunca viram nada sobre o ZF(Zend Framework) e estão querendo saber como ele funciona.
Quem já ouviu falar do Zend Framework? Resumidamente a Zend é uma empresa responsável pela manutenção e desenvolvimento do PHP.
A engine de orientação a objetos do php5 foi totalmente reescrita pelo pessoal da Zend.
Mas o que seria um framework?
O framework é um conjunto de classes com objetivo de reutilização de um design, provendo um guia para uma solução de arquitetura em um domínio específico de software. (Wikipedia)
Pode-se dizer que ele seria um conjunto de bibliotecas específicas.
Falando nossa lingua, o framework é um conjuntão de bibliotecas que ajuda em nosso trabalho do dia a dia, e nos trabalhos mais complicados também.
Esse artigo utiliza a versão 0.8 do framework. (dia 28/02/07)
[atualizado]
Versão atual: 1.0.2 (01/09/07)
[/atualizado]
Entendendo o Zend Framework
O Zend Framework segue o padrão MVC - Model View Controller. É um padrão de arquitetura onde separa o GUI, templates, etc(View) da lógica(Model) e do controle(Controller).
Então nele você pode usar a mesma lógica e/ou controle em diversas interfaçes com o usuário.
Usando o Zend Framework
- Faça download dele no site oficial: http://framework.zend.com/download
- Descompacte o arquivo em qualquer pasta. Exemplo: tar zxvf ZendFramework-1.0.2.tar.gz -C ~/
Agora vamos arrumar a estrutura de diretórios necessária para o correto funcionamento do ZF.

PS: a pasta ZF-tutorial fica dentro do DocumentRoot, que é onde fica suas páginas no servidor(padrão do apache: htdocs/ ou /var/www/).
No caso a pasta controllers, models e views estão dentro da pasta app(application, nome sugestivo). publico é onde vai suas outras coisas normais como imagens e css, js e assim por diante. E lib é a pasta onde vai ficar o ZF.
Entre na pasta onde você descompactou o arquivo tarball(.tar.gz), depois entre na pasta library e copie a pasta zend para a sua pasta lib(na ZF-tutorial) do seu sistema. Talvez você precise mudar(ou copiar) como root, aqui no exemplo vou usar sem o root.
-
cd ~/ZendFramework-1.0.1/library
-
cp -Rfv Zend/ documentRoot_do_apache/ZF-tutorial/lib/
Aí depois no diretório lib irá ter lib/Zend, certo?

Configurando o Apache
Primeira coisa que temos a fazer é abilitar o módulo rewrite do apache.
Edite o arquivo de configuração do apache, httpd.conf.
Descomente(tirando o #) a linha onde está escrito:
-
LoadModule rewrite_module modules/mod_rewrite.so
-
AddModule mod_rewrite.c
Defina o AccessFileName (pode ser no final do arquivo):
-
AccessFileName .htaccess
Setar a opção AllowOverride como All.
Trocar as linhas abaixo:
-
#<Directory />
-
# Options Indexes FollowSymLinks
-
# AllowOverride None
-
#</Directory>
por:
-
<directory>
-
Options FollowSymLinks Includes
-
AllowOverride All
-
</directory>
Criando o Bootstrapping
O controller do ZF, Zend_Controller, é feito para suportar websites com urls limpas.
Então, todas as requisições precisam ser feitas diretamente em um arquivo index.php, essa prática é conhecida como bootstrapping.
E para isso precisamos criar alguns arquivos .htaccess.
ZF-tutorial/.htaccess
-
RewriteEngine on
-
RewriteRule .* index.php
-
php_flag magic_quotes_gpc off
-
php_flag register_globals off
Essa RewriteRule quer dizer que para qualquer coisa escrita ele(apache) irá redirecionar para o index.php(que fica dentro do ZF-tutorial, calma que ainda vamos cria-lo). ![]()
Alí também setamos algumas configurações do PHP.ini. Essas configurações provavelmente já estão setadas como padrão, mas é bom ter certeza né. Elas só vão funcionar se estiver habilitado o mod_php no httpd.conf do apache.
Agora vamos setar nosso .htaccess na pasta público. Lá estará os arquivos JavaScript, CSS, imagens e assim por diante. Então vamos habilitar tudo por lá.
ZF-tutorial/publico/.htaccess
-
RewriteEngine off
Agora na pasta app e no lib não queremos que nenhum intruso acesse, porque lá estão nossos arquivos preciosos. ![]()
ZF-tutorial/app/.htaccess
-
deny from all
ZF-tutorial/lib/.htaccess
-
deny from all
Esse esquema de bootstrapping é recomendação dos desenvolvedores do ZF, ok? Motivo de segurança, sabe como é né.
Criando o nosso index.php(bootstrap file)
Agora vamos criar nossa index.php na pasta ZF-tutorial.
ZF-tutorial/index.php
-
<?php
-
error_reporting(E_ALL|E_STRICT); // para mostrar os erros, apenas nos testes(precisa estar setado no PHP.ini)
-
-
// Seta o timezone pra são paulo (>=PHP 5.1)
-
date_default_timezone_set(‘America/Sao_Paulo’);
-
-
/* Seta include path para o funcionamento correto do framework ***OBRIGATÓRIO*** */
-
.PATH_SEPARATOR.‘./app/models/’ //facilitar depois ao loadar as nossos modelos
-
-
/* Necessário para loadar qualquer outra classe do framework ***OBRIGATÓRIO*** */
-
include "Zend/Loader.php";
-
-
//loada o controller front
-
Zend_Loader::loadClass(‘Zend_Controller_Front’);
-
-
/*
-
Essa classe se encontra em Zend/Controller/Front.php
-
Pode ser loadado diretamente pelo nome se preferir
-
-
Para começar nós precisamos loadar primeiro o front controller
-
Ele faz um controle automático para detectar a base URL e fazer o redirecionamento correto
-
*/
-
$controlador = Zend_Controller_Front::getInstance();
-
$controlador->throwExceptions(true); // mostrar excessões(apenas para testes)
-
$controlador->setControllerDirectory(‘./app/controllers’); // seta diretório com nossos controllers
-
-
//Roda o sistema
-
$controlador->dispatch();
-
-
//sem fechar a tag php
Note que agente não fecha a tag php para nos previnir de erros usando o header(), no caso de espaços em branco adicionais depois do ?>.
Agora na pasta controllers vamos criar um IndexController.php. Esse controller vai entrar em ação sempre que o index for chamado.
Para entender como funciona, precisamos saber como o Zend_Controller_Front trabalha.
O ZF usa um sistema de Controllers(Controladores) e Actions(Ações). E isso é setado diretamente na url(lembra do bootstrapping?). Como?
Usando o nosso exemplo, no formato http://localhost/ZF-tutorial/index/teste o index é o Controller e o teste é o Action. Outro exemplo, http://localhost/ZF-tutorial/foo/bar o foo é o Controller e o bar é o Action.
E quando você não coloca nada? Exemplo, http://localhost/ZF-tutorial/ o Zend_Controller_Front considera como index o Controller e index a Action.
O que vem depois é parâmetro, mas isso é assunto pra depois
Vamos fazer nosso IndexController então
ZF-tutorial/app/controllers/IndexController.php
-
<?php
-
class IndexController extends Zend_Controller_Action
-
{
-
public function indexAction()
-
{
-
$this->view->titulo = ‘Primeiro Tutorial de Zend Framework’;
-
$this->view->detalhe = ‘Olá Mundo!’;
-
}
-
}
Atenção: Sempre o controller deve levar esse padrão NomeController.php e a classe com o mesmo nome do arquivo. A primeira letra sempre em maiúsculo e o resto minúsculo.
Já os Actions também deve levar esse padrão nomeAction(), sempre minúsculo.
Mas se você for rodar o sistema agora, vai perceber que vai dar uma excpetion gigantesca aí, certo?
Ela está falando que nós não temos o viewer para o index action do index controller.
Para criar, precisamos acessar a pasta scripts que está no ZF-tutorial/views/. Lá vamos criar uma pasta para cada Controller nosso, no nosso caso iremos criar uma pasta chamada index(por causa do IndexController). Todos os templates para o IndexController devem estar nessa pasta. O mais legal é que o nome do template leva o nome da action.
Calma, vou explicar: Por padrão cada action você pode ter um template ou não, mas se a action for tem um template para ela, então o template deve levar o mesmo nome da action. Por exemplo index.phtml(extenção do template) é o viewer do indexAction(), sacaram?
Na prática agora:
-
cd documentRoot_do_apache/ZF-tutorial/app/views/scripts
-
mkdir index
Agora nós temos que criar o index.phtml
ZF-tutorial/app/views/scripts/index/index.phtml
-
<html>
-
<head>
-
</head>
-
<body>
-
</body>
-
</html>
é recomendável que usemos o escape para escapar tags html.
Agora vamos testar nossa aplicação.
Acesse o http://localhost/ZF-tutorial e depois tente http://localhost/ZF-tutorial/index/index
Você vai perceber que deu no mesmo.
Tarefinha, de leve
Agora deixo uma tarefa para vocês: Criar um zfAction(), no IndexController, com seu respectivo viewer. Após criado, acessem http://localhost/ZF-tutorial/index/zf e vejam o que aconte!
Conclusões
Apesar desse tutorial mostrar de maneira simples como funciona o Zend Framework, podemos perceber como o Zend Frameowork é facil de usar e ao mesmo tempo é poderoso.
Para um maior aprendizado, irei postar um novo tutorial com muito mais recursos do ZF.
Por enquanto eu recomendo um tutorial muito bom(desenvolvedor do ZF), eu me baseei no tutorial dele, e tabmém usem bastante o manual.
Acesse a página de tutoriais do Zend Framework
Cya later!!
Emulando cd-rom no Linux
Ajude a Combater o Spam! Clique aqui!
Eu estava “precisando” instalar o age of empires 2 the conquerors(expanção) aqui na minha maquina. Então baixei ele no formato .iso mesmo.
Existem 2 opções para rodar o cd:
- montar o ISO9660 filesystem em um loopback device
- usando o cdemu. Uma ferramenta Open-Source
Usando o ISO9660 filesystem loopback device
Se você tiver com uma imagem de cd .iso é bem facil fazer isso. Apenas acesse a pasta onde está o arquivo .iso e use o comando:
$ sudo mount -o loop meucd.iso /mnt/meucd
Agora se você tiver com outros tipos de imagem, eu recomendo usar o cdemu que é bem facil de usar.
Usando o cdemu
Baixe a ultima versão do cdemu pelo site deles cdemu.sourceforge.net. A versão que usei é a ultima que tinha lá.
$ wget http://ufpr.dl.sourceforge.net/sourceforge/cdemu/cdemu-0.8.tar.bz2
descompacte o arquivo cdemu-
$ tar -jxvf cdemu-0.8.tar.bz2
compile e instale:
$ make
$ sudo make install
carregue o módulo do kernel:
$ sudo modprobe cdemu
Sempre que você for rodar o cdemu pela primeira vez(quando ligar o pc) carregue o módulo do cdemu.
Agora está pronto para usar.
Lembrando que você tem que criar a pasta que vai ser montada o cd:
$ sudo mkdir /mnt/cdrom
Se você quiser emular uma imagem bin/cue faça assim:
$ cdemu 0 imagem.cue
$ sudo mount /dev/cdemu0 /mnt/cdrom
Para ver o help:
$ cdemu -h
Para ver o status:
$ cdemu -s
É muito facil usar ele mesmo.. qualquer dúvida poste ou dê uma fuçada no site oficial.
Nomear corretamente faz sentido
Ajude a Combater o Spam! Clique aqui!
Cada um de vocês têm um nome, certo? E quando alguem te procura, ela vai te procurar pelo seu nome para te achar.
Assim também acontece com as search engine. O Google, Yahoo! e AltaVista - para citar algumas só - fazem a mesma coisa para achar páginas e imagens, por exemplo.
Quando você procura por uma imagem no google você digita o que? provavelmente o que ela significa. Por exemplo, para procurar uma imagem de um filme você coloca o nome do filme.
Mas porque isso é importante?
Utilizando técnicas SEO (search engine optimization)
Se você quer que seu site ou blog seja facil de ser localizado por um robozinho de busca seria interessante você renomear bem suas imagens. Vamos supor que você tem uma imagem daquele filme citado acima, mas o nome da sua imagem é DSC1002.jpg, será que o nosso querido usuário vai achar sua imagem? Certamente que não, pois os robozinhos ainda só leem os textos e não as imagens propriamente dita.
Então porque não renomea-las para o nome do filme certinho(senhor_dos_aneis_3_o_retorno_do_rei.jpg) para que o robozinho te ache?
[update 14/02/2007]
Não se esquecam também dos atributos da imagem, como por exemplo o ALT, que serve como um comentário da imagem(hint para programadores desktop).
[/update]
A dica está dada,
falooo abraço
Finalmente está no ar!!!
Ajude a Combater o Spam! Clique aqui!
Inaugurei meu novo dominio gente, felipetonello.com!!!
Até que fim parei de preguiça e coloquei esse blog para funcionar!
Eu estava querendo entrar com um layout novo e pronto. Agora está tudo novo. Vou colocar uns plugins depois para ficar melhor o blog, mas enquanto isso vai ser assim mesmo!
Galera, meus feeds continuam no feeds.feedburner.com/chackalsjc.
Mas então, o que acharam do layout? simples mas elegante, não?
Abraços galera. Está tarde e tenho que ir trabalhar!
Controle seu dinheiro com o Lucro!
Ajude a Combater o Spam! Clique aqui!
Todos nós temos desejo de sempre estar com dindin no bolso né. Quem não quer?!
Eu, como a maioria, também desejo controlar meus gastos. E ainda mais agora que estou recebendo meu primeiro salário, eu estou com essa necessidade.
Inspirado pelo post do Aurélio sobre o softwarezinho dele de controle de dinheiro eu achei interessante essa idéia e estou bolando o meu próprio, o Lucro.
Lucro é o nome do projetinho que estou iniciando(Java 6) para fazer um software de controle de despesas pessoais. Esse aplicativo tem como objetivo o controle facil das despesas do usuário e geração de agentes facilitadores desse controle, como por exemplo um relatório de apenas um gasto específico. E suas metas é justamente a facilidade de uso e de controle.
Mas essa ideia já não existe? Claro que sim, mas pelo menos todos os softwares de controle de gastos que eu vi eram tão complexos que eu desanimei de aprender a usar.
Para quem se interessar eu vou disponibilizar no sourceforge.net o projeto quando estiver andano com passos mais firmes.
Quem tiver interesse de entrar na equipe de desenvolvimento(eu por enquanto hehe), por favor, sinta-se em casa e entre em contato comigo. Como todo projeto o voluntário precisa ter alguns requisitos minimos. A lista:
- Ter um conhecimento intermediário de Java
- Conhecimentos em Swing, XML e PDF
- E o mais importante: Muita vontade de aprender e ensinar!
Irei postando conforme o progresso.
Bom galera, é isso ae!!
Projeto Tecnotel chega ao seu fim!
Ajude a Combater o Spam! Clique aqui!
Com grande orgulho eu posto aqui sobre esse projeto, mais que um projeto, uma grande ideia que merece ser reconhecida. Vencedora de prêmio de melhor projeto na EXPOETEP 2005, terceiro lugar na FEBRACE 4(Feira Brasileira de Engenharia e Ciência) na USP e em 2006 como melhor projeto.
Quem acompanha meu blog a algum tempo conhece muito bem esse projeto. Se você não conhece esse projteo aproveite porque eu já fiz outros posts sobre o projeto e esse é seu final. Pelo menos por enquanto.
Aproveite e acompanhe o crescimento do projeto. Eu postei algumas fotos do projeto no meu flickr. Vale a pena conferir.. desde seu inicio, feito em C e bem mais simples, com apenas controle da linha telefônica e saida para o circuito da casa.
Depois quando estava muito mais complexo, feito com java, acesso com controle remoto e via internet, e um monte de coisa.. nosso projeto estava bem completo e muito bem realizado. Seque algumas fotos.




Para acessar mais fotos do projeto acesse o meu flickr na tag tecnotel.
Para saber mais do projeto acesse a minha tag tecnotel ou acesse o blog do Gustasvo.
Faça download do nosso projeto(ainda não atualizamos para a versão final) no sourceforge.net ou no codigolivre.org.br.
Obrigado,
[]’s Felipe Ferreri Tonello


