Illustration of a bird flying.

Começando com o Zend Framework


Participo de diversos grupos de desenvolvimento no Facebook e um dia um dev estava questionando sobre quem utilizava Zend Framework. Foram muito poucos devs que se manifestaram, e o pior, alguns ainda pra sugerir que o autor do post usasse Laravel. Nada contra o Laravel, até mesmo porque o conheço pouco, mas fiquei impressionado em encontrar alguns números referentes ao Zend para compartilhar com o pessoal no grupo. Também os comparilharei aqui para mostrar que sim, o Zend Framework é um framework bastante utilizado ainda. E já anuncio que criarei uma série de artigos para mostrar o funcionamento do mesmo e auxiliar principalmente quem está no início com este framework e ainda com muita dificuldade, como eu tive um dia.

Um pouco da história

Pra quem não conhece, o Zend Framework (ZF) existe há muitos anos e como todo bom framework vem evoluindo a cada versão. A primeira versão, assim como muitos outros, foi bastante utilizada mas por as PSRs ainda nem terem sido definidas, o mesmo possuía algumas convenções para facilitar o autoload de classes e a localização de views, por exemplo.

Na versão 2 as coisas já mudaram. Tínhamos um autoload de classes que todo mundo praticamente já estava utilizando, o framework adotou o conceito de módulos e passou pedir informações ao dev para tudo. Não existem mais convenções do tipo: tabela no banco de dados “users”, model “user” e controller “usercontroller”. Agora pode ser o que você quiser, aliás, o que você “disser” ao ZF. Não existiam mais coisas automágicas. O fato de você esquecer de informar onde se encontra um controller, por exemplo, faz ele não funcionar. O mesmo para as views, conexão com banco de dados e até mesmo um módulo como todo.

Mas se tudo é tão difícil por que o usar?

O ZF tem uma coisa incrível que me faz o adorar cada vez mais, Orientação à Objetos levada à sério. Não que outros frameworks não tenham, mas no ZF as coisas simplesmente são elevadas à outro nível. Aprende-se muito de OO com ele.

Com relação aos módulos, foi um grande salto. Já expliquei em algum lugar neste artigo que os módulos foram criados com a intenção de serem aplicações resolvendo muito bem o seu problema de domínio. Indo mais a fundo, temos o reaproveitamento destes módulos. A intenção é que os módulos sejam independentes, ok, sabemos que na prática em um sistema de médio ou grande porte isso não é possível para todos os módulos, no entanto para muitos deles sim. Uso com exemplo um módulo que coloco em todos os projetos que crio com o ZF: User. Este módulo tem por finalidade prover CRUD de usuários no sistema, validação de token e recuperação de senha. Algo bem comum em todo sistema, e, por este módulo ser independente de qualquer outro, ele é plug n play.

Preparando as coisas para o ZF3

Quem já trabalha há tempos com o ZF percebeu que na versão 2.5 começou o preparo do terreno para a nova versão do framework, o ZF3. Antes: um framework grande que trazia todas as suas funcionalidades embutidas, você as utilizando ou não. Após a versão 2.5: um framework limpo e  granular onde cada domínio foi separado em forma de um pacote e você usa somente o que precisa. O Symfony já fazia isso há tempos e o ZF adotou esta boa prática também.

No começo me bati um pouco pois muitas das coisas que eu usava e já estavam prontas, tinham de ser registradas no composer.json e algumas ainda, carregadas no arquivo de módulos config/modules.config.php.

Como as coisas ficaram mais simples

Tudo isso foi para um bem maior. A migração do ZF2 para ZF3, pelo menos nos projetos que desenvolvi na época, foram quase que imperceptíveis. O que eu tive de mudar foi: registrar coisas no composer.json, no config/modules.config.php e alterar a forma de obter o service manager nos controllers. O resto ficou intacto e algumas coisas até melhoraram, exemplo disso é a utilização dos templates twig. No ZF2 sempre sofri pra configurar, a cada nova tentativa um novo erro. No ZF3 hoje trabalho somente com o twig, a integração ficou tão simples que basta adicionar um módulo e pronto, pode começar a fazer suas views com o twig.

Alguns números

Com base nas instalações via composer somente, percebemos que o ZF ainda é bastante utilizado no mundo todo. Óbvio que a moda agora é Laravel, então ele não vai chegar perto mesmo, no entanto tem muita instalação. Sem contar as instalações via zip ou clone diretamente pelo github que não tem como mensurar.

Então vamos lá aos números de instalações pelo composer.

ZF1: >2.6 milhões

ZF2 (até a versão 2.4.*): >4 milhões

ZF2 (acima da versão 2.5) e ZF3: Difícil de mensurar porque o framework foi modularizado, mas arriscando pelo zend-mvc (que está presente na grande maioria dos projetos mais recentes com o ZF) temos mais de 3.6 milhões de instalações.

Óbvio que todos estes números parecem minúsculos perto das instalações do Laravel ou Symfony, mas ainda sim, é muita gente usando o ZF.

Como começo?

Se você pretende utilizar o ZF para algum projeto de teste ou mesmo para matar a curiosidade, eu sugiro iniciar sempre com o Zend Skeleton Application. Isso porque é uma aplicação básica com tudo preparado para você começar trabalhar. Nela já existe todo o bootstrap de módulos, carregamento de views e rotas. Basta que se inicie o trabalho. Ah, e já vem com o Twitter Boostrap.

Para iniciar sua primeira aplicação com ZF é simples: rode o comando composer create-project -sdev zendframework/skeleton-application uma_pasta_qualquer.

Este “uma_pasta_qualquer” deve ser substituído pelo nome do projeto que você quer criar.

Perguntas, perguntas e mais perguntas

Uma das maiores dificuldades em quem decide se aventurar no ZF é saber se tem que instalar ou não a lib que é sugerida na criação do projeto. Normalmente são realizadas algumas perguntas, vou guiá-lo(a) e explicar pra que serve cada um dos itens que o Skeleton Application sugere.

Instalação mínima ou tradicional?

Do you want a minimal install (no optional packages)? Y/n – responda n

Aqui é questionado se você quer uma instalação mínima, sem pacotes adicionais. Se concordar, uma aplicação totalmente crua será criada. No entanto já queremos algumas features como sessão, mensagens de sessão (flash messages), suporte à formulários e helpers. Então a dica aqui é responda n.

Developer toolbar

Would you like to install the developer toolbar? y/N – responda y

Um item importantíssimo para que você saiba de informações relevantes da sua aplicação. Uma barra no rodapé da página que exibe status de requests, tempo de carregamento da aplicação, configurações, módulos, e até consultas sql.

Zend DB

Would you like to install database support (installs zend-db)? y/N – como uso sempre o Doctrine, respondo N

Esta lib é para que o ZF conecte de forma nativa ao banco de dados. Como não entraremos nos detalhes de banco de dados, pode responder N também.

Forms

Would you like to install forms support? y/N – responda y

O Zend trouxe um conceito de formulários muito bacana. Você cria uma classe form para definir os campos do seu formulário. Nesta classe é informado para cada elemento o seu tipo, label, se é obrigatório, se já vem com dados pré-populados, classe css, id, placeholder, dentre outros. Certo, mas isso é possível fazer na mão também, pra que criar uma classe pra definir tudo isso? Porque você pode tornar as coisas mais interessantes. Pretendo criar posts para exemplificar o uso de diversos artefatos do ZF e os forms estão entre eles. Ou seja, este post terá continuidade.

Pra deixar as coisas mais interessantes você cria os filtros do form. Nada mais é que uma classe que espelha cada um dos elementos do form e neles você adiciona regras como filtro de dados e validações. É muito funcional, quando eu escrever sobre isso você verá do que estou falando.

Não, não e não!

Would you like to install JSON de/serialization support? y/N

Would you like to install logging support? y/N

Would you like to install MVC-based console support? (We recommend migrating to zf-console, symfony/console, or Aura.CLI) y/N

Pode responder N para estas perguntas. Não os usaremos neste post nem num futuro tão próximo.

Yes, please

Would you like to install the official MVC plugins, including PRG support, identity, and flash messages? y/N

Would you like to install sessions support? y/N

Would you like to install MVC testing support? y/N

Would you like to install the zend-di integration for zend-servicemanager? y/N

Responda y para estas acima. São facilidades que o ZF nos dá para trabalhar com mensagens de sessão (flash messages), obtenção de dados do usuário logado, incluindo o suporte à MVC e service manager.

> Detalhe que com o passar do tempo estas perguntas que são feitas no momento da criação do projeto podem se alterar pois o ZF está em constante evolução.

Chega de perguntas?! Ai… tem mais

Por fim, se surgirem perguntas como a da imagem abaixo, sempre informe a opção que injeta a configuração em config/modules.config.php.

Assim que pressionar ENTER, aparecer a pergunta se quer que a opção seja lembrada para pacotes do mesmo tipo, confirme.

E por fim, o instalador perguntará se quer remover o histórico original do versionamento, confirme.

Pronto, já temos uma instalação básica do ZF3 pronta para funcionar.

ZF em ação

De imediato já lhe deixo claro que você tem no mínimo 5 opções para rodar seu ZF Skeleton recém instalado:

  1. Pelo Built-in Server do PHP (php -S localhost:8080 -t public);
  2. Pelo comando pré configurado no composer.json (composer serve). Nada mais é que o mesmo comando do Built-in Server;
  3. Pelo seu *AMP (Xampp, MAMP, LAMP, etc);
  4. Através do Docker (leia o README do projeto que acabou de criar);
  5. Através do Vagrant (leia o README do projeto que acabou de criar);

Vou utilizar o built-in server: php -S localhost:8080 -t public

Agora basta acessar o navegador pra ver o ZF em funcionamento: https://www.andrebian.com

Concluindo

Neste post você aprendeu algumas características do ZF e que ele é um framework que apesar de requerer muita configuração e uma alta curva de aprendizado, lhe ensina sobre OO. A minha dica pra você que está na dúvida se deve utilizar o ZF ou não é que fique ligado(a) aqui no blog que escreverei mais para mostrar o caminho das pedras. Comecei usar o ZF pra valer em Agosto de 2015 e desde então não consigo mais parar. Crio aplicações com outros frameworks e CMS também como Symfony, Silex e WordPress, mas me vejo sempre voltando ao ZF por já ter muita coisa reaproveitável ao longo destes quase 3 anos. Hoje consigo com o ZF a mesma agilidade que tinha com o CakePHP na época ou um dev com o Laravel ou Codeigniter, por exemplo.

Mas friso, ao longo destes quase 3 anos criei muita coisa com ZF e consigo dar o bootstrap em um novo projeto em poucos minutos. Desta forma sempre que aparece aqui na empresa aqueles projetos que eram pra ontem, é de ZF que eu vou. Quando tenho mais tempo eu tento outras coisas, mas hoje estou basicamente com ZF, Symfony e WordPress e as coisas vem sendo incríveis com relação à produtividade.

Então é isso, fica o meu convite para você continuar por aqui que falarei mais sobre o ZF nas próximas semanas. Inscreva-se nas notificações e receba em primeira mão quando eu postar algo novo.

> Ps. Esta semana o post saiu atrasado porque estou com muito trabalho. Normalmente eu posto bem no início da semana, mas pra não ter erro, inscreva-se nas notificações 😉