You are on page 1of 6

Miniframework PHP

Nas ltimas semanas fiz uma pesquisa para encontrar um framework PHP que eu pudesse usar em meus aplicativos/sites. Encontrei vrios frameworks interessantes. Depois de ver vrios deles uma pergunta me ocorreu: realmente preciso de um framework?. por Elton Lus Minetto

Nas ltimas semanas fiz uma pesquisa para encontrar um framework PHP que eu pudesse usar em meus aplicativos/sites. Encontrei vrios frameworks interessantes como:

Symphony Prado Code Igniter Zend Framework

Depois de ver vrios deles uma pergunta me ocorreu: realmente preciso de um framework?. Realmente utilizar um destes frameworks auxilia bastante o desenvolvimento, evitando que voc refaa coisas que j existem. Mas muitas vezes estes frameworks possuem alguns problemas:

so muito maiores do que voc precisa; a documentao confusa; poucos esto suficientemente maduros; preciso aprender uma nova sintaxe ou maneira de se desenvolver; voc fica engessado, difcil fazer coisas mais avanadas ou que saem do padro CRUD;

Ento pensei que o que eu preciso somente uma maneira de separar a lgica da apresentao, uma maneira de facilitar o acesso a bancos de dados e algo que me ajude a trabalhar com AJAX. Assim, peguei algumas idias que vi nas documentaes que li e algumas coisas que j utilizava e uni tudo para suprir minhas necessidades. Modelo de aplicao MVC Architecture? Segundo Rasmus Lerdorf, criador da linguagem PHP, MVC palavra do momento em arquiteturas de aplicao web. Ela vem do design de aplicaes para desktop orientadas a eventos e no se aplica muito bem no design de aplicaes web. Mas felizmente ningum sabe exatamente o que MVC significa, ento voc pode chamar seu mecanismo de separao de camada de apresentao de MVC e seguir em frente. Ento, o que estou usando aqui somente um mecanismo de separar o layout (html+css) do cdigo PHP. Ao invs de usar as trs camadas do MVC eu resumi para duas, Viso e Controle. A parte da viso representada por templates. Seguindo outra tendncia que percebi em outros frameworks a parte de viso representada por simples scripts PHP ao invs de utilizar uma das ferramentas de Templates como Fast Template, Smarty, etc. mais simples de trabalhar e no necessrio aprender uma nova sintaxe.

Para a parte do controle eu desenvolvi uma classe chamada app. Nesta classe eu controlo as aes do usurio. Ela age como o controlador das aplicaes testando qual ao o usurio escolheu e invocando o mtodo correto (que dever ser reescrito nas suas subclasses, as novas aplicaes). A idia que cada aplicao seja uma subclasse da classe app. Este o cdigo da classe app: Classe app Outra classe desenvolvida a classe tabela. Esta classe responsvel por abstrair e facilitar a manipulao de tabelas de bancos de dados. Seu cdigo fonte descrito abaixo. Classe tabela Exemplo de aplicao Para ilustrar o funcionamento eu criei uma pequena aplicao com as classes. A aplicao um sistema de blog, com posts e comentrios. A estrutura de diretrios ficou assim: classes/ - diretrio com as classes classes/app.php classe app classes/tabela.php classe tabela para tratamento de tabelas no banco de dados classes/adodb - classes adodb para abstrao de bancos de dados. necessrio para a classe tabela. classes/JSON.php para utilizar JSON, usado por algumas pginas que usam AJAX js/ajax.js javascript para auxiliar a utilizao de AJAX imagens/espera.gif imagem usada para mostrar o status da pesquisa blog/ diretrio da aplicao blog/index.php subclasse da classe app blog/view/ - diretrio com as vises blog/view/index_view.php viso inicial blog/view/login_view.php viso da pgina de login blog/view/comentario_view.php viso dos comentrios blog/view/admin_view.php viso da pgina de administrao blog/view/estilo.css arquivo com as definies de CSS para as vises blog.sql arquivo sql com os comandos para criar as tabelas da aplicao A primeira tarefa criar a base de dados e as tabelas que sero utilizadas no exemplo. Para isso foram executados os seguintes comandos sql (gravados no arquivo blog.sql): create database blog; use blog; create table post (id_post int primary key auto_increment, tit_post varchar(255), ds_post text, dt_post date); create table comentario(id_com int primary key auto_increment,ds_com text, email_com varchar(100), id_post int);

A base de dados usada neste exemplo o MySQL. O cdigo do arquivo index.php do diretrio blog deve ser uma subclasse da classe app. O cdigo inicial ficou desta forma: index.php - inicial O primeiro mtodo a ser escrito o mtodo index(). Este mtodo o mtodo inicial da aplicao. O construtor da classe app sempre vai invocar este mtodo caso no tenha sido escolhida outra opo. Complementando o cdigo: index.php - metodo index() O cdigo do arquivo view/index_view.php o seguinte: index_view.php O mtodo showView da classe app vai transformar cada ndice do vetor $dados em uma varivel ou em um novo vetor. Ento o script index_view.php vai simplesmente imprimir seus valores. Uma nova linha deve ser adicionada no final do arquivo index.php : $blog = new blog(mysql://root:@localhost/blog); Nesta linha instanciado um novo objeto da classe blog criada. Como parmetro para o construtor da classe enviado a string de conexo com a base dados. Esta string no formato usado pelo ADODB e a sintaxe para diversos bancos de dados podem ser encontradas no site da ferramenta. Executando-se a aplicao deve-se obter o seguinte resultado:

Todas as definies de cores, fontes e estilos foram adicionadas no arquivo estilo.css utilizando-se as tcnicas de CSS. Desta forma, os arquivos de viso no possuem formataes de estilo e sim somente informaes dos dados que devem ser gerados. A parte de formatao fica em separado, o que facilitaria caso fosse necessrio alterar as definies de layout da aplicao. O cdigo do arquivo estilo.css o seguinte: estilo.css O prximo passo criar as outras aes da aplicao. Por exemplo, quando o usurio clicar no link comentrios ele ser direcionado para: http://localhost/blog/index.php?op=comentarios&id_post=15 Como a varivel op controla a ao que o usurio escolheu precisamos definir um novo mtodo na classe blog para atender a esta requisio. Ento o seguinte cdigo deve ser adicionado aos mtodos da classe blog (arquivo index.php): index.php - mtodo comentario() O mtodo comentarios() faz uso da viso comentario_view.php. Seu cdigo : comentario_view.php Assim, quando o usurio clicar no link Adicionar comentrio na pgina inicial sero apresentados os comentrios existentes e um formulrio para adio de um novo comentrio, conforme a imagem abaixo ilustra:

Quando o usurio submeter os dados do novo comentrio a ao addComentario ser executada, como indicado pelo input hidden chamado op na linha 26 do

comentario_view.php. Para que esta ao seja executada o seguinte cdigo deve ser adicionado no arquivo index.php. index.php - mtodo addComentario() Quando o usurio clica no link Admin da pgina inicial ele redirecionado para a viso que mostra o formulrio de login. O mtodo da classe blog que realiza esta ao : index.php - mtodo mostraLogin() E o cdigo fonte do arquivo login_view.php pode ser visualizado abaixo: login_view.php O mtodo login da classe blog responsvel pela validao do usurio e por mostrar a viso de administrao. Neste exemplo no feito nenhuma validao especfica, isso deixado a cargo do leitor, podendo implementar algum mtodo de autenticao que seja pertinente. index.php - mtodo login() A viso de administrao a mais complexa de todas. Alm de mostrar os posts j cadastrados na tabela ela fornece opes de excluso e de alterao dos mesmos. Para melhorar a interao com o usurio usado tcnicas de AJAX para buscar os dados do post antes do usurio realizar a alterao.Para facilitar coloquei grande parte do cdigo Javascript no arquivo ajax.js O cdigo do arquivo admin_view.php mostrado abaixo, com seus comentrios. admin_view.php Quando o usurio clica no link Alterar uma conexo assncrona aberta com o servidor via AJAX solicitando os dados do post. Os dados so codificados no formato JSON. JSON um formato leve para troca de informaes. facil para humanos lerem e escreverem. E fcil para as mquinas processar e gerar. Uma espcie de XML ligth. baseado na notao de objetos do JavaScript, o que cai como uma luva para usar com o XMLHttpRequest. A classe blog utiliza o include JSON.php para gerar os dados neste formato. Este script pode ser encontrado no repositrio PEAR, no endereo http://pear.php.net/pepr/pepr-proposal-show.php?id=198 e mais informaes sobre o JSON podem ser encontrados no http://www.json.org. Um exemplo da viso de administrao mostrado na figura abaixo:

Abaixo mostrado o cdigo final da classe blog com todos os mtodos comentados acima e os mtodos restantes, addPost(), del(), altPost() e buscaPost(). index.php - arquivo final Tenho usado estas classes em alguns novos projetos que estou desenvolvendo e o ganho de produtividade tem sido interessante. Se ajudar para algum fica a minha contribuio. Download de todos os cdigos Elton Lus Minetto eminetto at gmail dot com http://www.unochapeco.edu.br/~elm/

Read more: http://www.linhadecodigo.com.br/artigo/1099/miniframeworkphp.aspx#ixzz2ehDi3DC8

You might also like