Archive for category framework
Kohana Framework: Lista de discussão
Aviso ao pessoal que provou o Kohana framework e gostou: Algumas pessoas estão se movimentando novamente e criaram a lista de discussão do framework em português, para discussões, dicas e dúvidas.
Relacionamento entre tabelas com ORM do Kohana Framework
Importante: Este artigo refere-se a uma versão antiga do Kohana Framework, que recentemente fez diversas alterações em seu ORM. Se você estiver utilizando a nova versão, favor verificar o Guia do Usuário do Kohana para mais informações.
Achei o post do Adler sobre relacionamento entre tabelas com o Zend Framework bem bacana e didático. Estou me devendo uma olhada no ZF, que já está na versão 1.5.1 (enquanto escrevo este artigo), mas isso deve ficar mais pro final do ano.
Resolvi então fazer uma espécie de série, sobre ORMs dos frameworks. Quem aí trabalhar com CakePHP, Symfony, Doctrine, Lumine ou qualquer outro framework/orm, faça um artigo sobre isso e vamos fazer uma rede de links. Pode ser muito útil pra comunidade, principalmente pra quem procura um framework. Por aqui, vou falar do Kohana framework. Mãos à obra:
No Kohana, para usar o ORM você precisa seguir uma padronização de nomes de tabelas e das chaves estrangeiras, então, nossas tabelas de UF e Cidade ficariam assim:
ufs id - INT - PRIMARY KEY nome - Varchar(100) cidades id - INT - PRIMARY KEY nome - Varchar(100) uf_id - INT - FOREIGN KEY
Sim, as tabelas precisam estar no plural (no padrão americano), e não quero entrar no mérito se isso é bom ou ruim. Continuemos o exemplo mostrando como seriam nossas classes para cada uma das entidades, já montando os arrays para os relacionamentos:
class Uf_Model extends ORM
{
protected $has_many = array('cidades');
}
class Cidade_Model extends ORM
{
protected $belongs_to = arary('uf');
}
No Kohana, as classes de modelo devem ter o sufixo “_Model”, e aqui extendemos a classe ORM. Aqui uma outra controvérsia. Quando declaramos o array has_many, colocamos a entidade no plural, mas quando declaramos belongs_to, está no singular. Apesar de fazer sentido, é preciso ficar atento pra não confundir as coisas. Você ainda pode ter os seguintes relacionamentos:
- has_one
- belongs_to_many
- has_and_belongs_to_many
Nos resta agora demonstrar um exemplo prático de como trabalhar com as duas entidades. Confesso que gostei muito mais da implementação do belongs_to, que comento mais pra baixo, mas este modelo também é bastante prático. Vejamos um controller de exemplo:
class Index_Controller extends Controller
{
public function index()
{
// instancia o objeto UF com id 1
$obj_uf = new Uf_Model(1);
// Pesquisa pelas cidades desta UF
$cidades = $obj_uf->find_related_cidades();
// Percorre as cidades exibindo na tela
foreach ($cidades as $cidade)
{
echo $cidade->nome.'<br />';
}
}
}
Poderíamos usar o ORM::factory() para recuperar a uf, que usa o method chaining do PHP:
$obj_uf = ORM::factory('uf')->find(1);
Agora vou demonstrar algo que achei muito prático e que poupa bastante tempo de codificação, que é a recuperação do nome da UF a partir de uma cidade, veja este outro exemplo de controller:
class Index_Controller extends Controller
{
public function index()
{
// instancia o objeto Cidade com ID 1
$obj_cidade = new Cidade_Model(1);
// Exibindo nome da Cidade e UF na tela
echo 'Cidade: '. $cidade->nome .'<br />';
// O objeto uf já é inserido automagicamente no objeto cidade
echo 'UF: '. $cidade->uf->nome;
}
}
Isso mesmo que você leu. Não preciso fazer absolutamente nada pra recuperar a UF, o framework faz isso automaticamente através do método mágico __get(). Como eu disse antes, muito prático.
Conclusão
Em um comparativo com o tutorial do Zend Framework, creio que o Kohana cumpriu o seu papel de tornar o desenvolvimento mais ágil, porém, perde em organização e poder das funcionalidades de mapeamento dos objetos.
E vocês, o que acharam dessa implementação?
Minhas impressões sobre o Kohana Framework

Alguns dias atrás, ouvi falar novamente do Kohana Framework, um fork do Code Igniter, feito por diversos usuários e entusiastas do CI que se sentiam órfãos por não poder ajudar no desenvolvimento do framework, já que a EllisLab é a única mantenedora do código.
O framework promete ser mais rápido, fácil de usar, de extender e, principalmente, “Strict PHP 5″, isto é, desenvolvido com todas as infinitas vantagens que a versão 5 do PHP tem em relação à 4. Como na minha opinião, a preocupação de manter compatibilidade com PHP 4 do CI impede a evolução do framework, achei melhor testar e escrevo aqui minhas impressões.
Comunidade
Quando vou analisar um framework novo, a primeira coisa que eu faço é ver se a comunidade é ativa, se existe um wiki ou fórum bem documentado. Lição aprendida depois de testar um bom framework, e só depois descobrir que até o fórum de desenvolvedores estava deserto.
A primeira impressão é que existe uma boa quantidade de usuários cadastrados e de mensagens no fórum. Os desenvolvedores parecem bastante ativos no fórum, e isso é um bom sinal.
Documentação
A documentação do Code Igniter é muito boa, bem acima da média. O Kohana tem uma documentação muito parecida, mas não muito bem adaptada à realidade dele. Os exemplos não utilizam o dito “Strict PHP 5″, e passam uma imagem distorcida da implementação e qualidade do framework.
É bem verdade que ainda são drafts, e a documentação está em fase de maturação, mas documentação é algo que faz muita falta quando queremos entender o funcionamento do framework.
Organização dos Arquivos
O Kohana já vem com a aplicação e o Core separados “de fábrica”, ao contrário do Code Igniter. Outra diferença é que, com a excessão de um arquivo de configuração da aplicação, todos os arquivos de configuração foram para a pasta system\, isto é, não é possível ter configurações diferentes para aplicações diferentes. O Rafael me alertou que é possível sim ter configurações diferentes pra aplicação, para isso, basta copiar o arquivo e colar lá, que ele usa sempre o da aplicação.
Foi desenvolvida uma padronização de nomemclatura das classes, diferenciando possíveis classes da mesma entidade nas diferentes camadas do sistema. Pra simplificar, a entidade Usuário terá o Usuario_Controller, e o Usuario_Model.
Libraries & Helpers
Assim como o CI, é possível estender o framework sobrescrevendo as libraries. Identifiquei um problema em algumas Libraries, onde existem métodos privados. Dessa forma, ao criar uma extensão, pode não ser possível aproveitar todas as funcionalidades da classe. Acredito que os métodos deveriam ser protegidos e muito provavelmente “final”, para não serem modificados.
Os helpers deixaram de ser apenas funções (ufa!) e se transformaram em métodos estáticos. Existe uma classe chamada “arr”, que poderia ser apenas uma extensão da classe Array da SPL.
Diversos
Mais alguns itens interessantes (ou não):
- Não notei nenhuma diferença entre a camada de visualização do Kohana e CI;
- O Kohana trabalha com autoload, e isso facilita a criação de extensões de Controllers e Models, que não sejam pela forma padrão, conforme eu disse num artigo sobre especialização de Controllers no CI.
Conclusão
Gostei do Kohana e acho que ele tem muito potencial pra superar o Code Igniter. Já começaram uma campanha no fórum em busca de pessoas pra ajudar na documentação e no desenvolvimento do framework.
Como é um projeto relativamente novo, óbviamente precisa de ajustes e uma comunidade forte é crucial neste sentido. Se voce acredita no potencial do CI e adoraria usar uma versão PHP 5, pense bem se não vale mais a pena colaborar com a comunidade do Kohana.
Lançada versão 1.5.4 do Code Igniter
Não estou tendo muito tempo pra escrever por aqui, mas percebi, bem atrasado, que lançaram mais uma versão do Code Igniter, a 1.5.4, onde foram realizadas diversas correções.
Links interessantes:
Zend Framework ou Code Igniter?
A muito tempo atrás, o Felipe Diesel pediu para eu fazer um comparativo entre os frameworks Code Igniter e Zend. Andei comentando sobre ambos, pois no trabalho optamos pelo Code Igniter, enquanto isso, havia optado pelo Zend Framework para tocar alguns projetos pessoais.
É bom lembrar que, quando optamos pelo CI, o Zend Framework ainda estava na versão 0.x, e descartamos a possibilidade de trabalhar nessa versão ainda beta. Mas vamos aos fatos
Code Igniter
Como eu já disse aqui antes, o Code Igniter é muito prático. Inspirado no Ruby on Rails, é possível começar o desenvolvimento da aplicação apenas configurando os diretórios (se você não usar o padrão) e conexão com banco.
Ele implementa o MVC e traz diversas funcionalidades pra facilitar o desenvolvimento, como o padrão Active Record, Scaffolding e bibliotecas como Paginação, Validação, Compactação (zip) e etc. Facilmente extensível com a implementação de plugins e helpers, além de possuir diversas ferramentas como um gerador de código e bibliotecas de interface como o Rapyd, que, na minha opinião, não foi bem integrado ao framework.
Os problemas que eu vejo no Code Igniter são pequenos detalhes, como a falta de padronização de nomenclatura de arquivos e, a pior delas, a desorganização do código do framework.
Zend Framework
Do outro lado, o Zend Framework é o framework PHP mais organizado dos que testei até hoje. Com nomenclatura de classes agregada aos caminhos do arquivo, é muito fácil encontrar o que você procura. Houve também uma preocupação em manter o código simples, pensando em manutenibilidade, que também tornou muito fácil a criação de extensões para o Zend, através de Helpers, Plugins e etc.
Por outro lado, pra você configurar o Zend Framework são necessários alguns passos a mais e um nível de conhecimento maior, porém, feito uma vez, você pode usá-la em todas as aplicações que for desenvolver, realizando apenas pequenos ajustes.
Conclusão
A grande verdade é que tudo depende da aplicação. Eu vejo o Zend Framework como algo mais robusto, para ser utilizado em aplicações que necessitem da organização e da base sólida da Zend, que assina o framework. Do outro lado, está o Code Igniter, ágil e prático.
O que você prefere?
Comunidade Brasileira do Code Igniter
O Daniel Costa divulgou o surgimento da comunidade Brasileira do Code Igniter, assim como a tradução do manual do framework, que colaborei traduzindo algumas páginas, assim como o surgimento da lista de discussão sobre o framework.
Quem está usando o framework, vale a pena fazer parte da lista.
Lançada a primeira versão do Zend Framework
Depois de meses de espera, pelo menos pra mim, e 3 Releases Candidate finalmente foi lançada a versão 1.0.0 do Zend Framework.
Agora não temos que nos preocupar tanto com compatibilidade ao utilizar o framework pra desenvolver nossas aplicações, e acredito ser questão de tempo para começar a aparecer ferramentas e extensões (view e controller helpers, plugins, …).
Faça o download do ZF.
Lançado o Zend Framework 1.0.0 RC1
A equipe do Zend Framework anunciou agora a pouco o lançamento da Release Candidate 1 de sua primeira versão.
Segundo o anúncio, mais de 90 bugs foram corrigidos da versão 0.9.3, e algumas funcionalidades importantes, como o Zend_Controller, Zend_Db e o Zend_Filter_Input sofreram modificações, e talvez seja preciso algum esforço pra migrar as aplicações.
Não tive tempo de olhar com calma ainda, mas parece que tudo que você precisa saber já está no manual. Pra saber todas as alterações, veja o changelog.
Componentes de Visualização no Zend Framework
Algumas pessoas que conversam comigo sobre frameworks, geralmente sobre por que escolheram A ao invés de B, citam como fundamental a existência de componentes de visualização, para facilitar o trabalho de não ter que criar diversas vezes aquelas estruturas de repetição para preencher uma tabela ou uma lista em HTML.
No Zend Framework, existe uma estrutura para a criação de Componentes na camada de visualização, exatamente para atender à essa necessidade, que são os View Helpers.
Apesar da versão padrão vir apenas com componentes básicos de formulários, para criação de botões, combos, e campos de texto, e um para criação de listas em HTML (ul/ol e li), acredito ser uma questão de tempo pra surgir uma boa quantidade de componentes capazes de realizar as mais diversas tarefas automaticamente.
Os Helpers estão localizados no diretório Zend/View/Helpers/, e você pode criar novos componentes apenas seguindo o padrão definido no manual do framework, que inclui nomenclatura das classes (Ex.: Zend_View_Helper_NomeHelper) e o fato do método de execução do componente ser o mesmo da classe (No exemplo passado, seria: nomeHelper).
Tutorial do Zend Framework em Português
Posted by newton in desenvolvimento, framework on May 7th, 2007
Uma das melhores referências do Zend Framework era o tutorial Getting Started With Zend Framework, disponibilizado no Akra’s DevNotes.
O Adler percebeu a dificuldade de muitos desenvolvedores em entender o tutorial, e resolveu traduzí-lo para nossa língua. Você pode baixar a versão traduzida, em PDF, na própria página do tutorial. Ainda não tive tempo de ler, mas parabéns pelo trabalho e iniciativa do Adler.