Um estudo comparativo entre frameworks PHP, analisando as diferentes abordagens, vantagens e desvantagens de cada um deles, a fim de entender em que situações cada um deles é mais adequado para uma aplicação.
2. JAIME NETO
● Graduado em Telemática pelo CEFET-PB (atual IFPB)
● Especialista em Desenvolvimento de Software para Web pela UNIBRATEC
(atual Estácio)
● Zend Certified Engineer - Zend Framework 1
● Analista de Sistemas no Instituto Chico Mendes de Conservação da
Biodiversidade (ICMBio)
● Programador PHP desde 2004
● Membro do PHP-PB desde os primórdios
9. Ficam as questões:
● Será que todos os frameworks são apenas
implementações diferentes para um mesmo fim?
● Os objetivos deles são os mesmos?
● Quais são melhores e em que aspectos?
● Existe um framework “bala de prata” que resolva todos
os problemas?
10. Como desmistificar isso?
/php-pb/Sua-escolha
Proposta para a comunidade:
● Implementar um mesmo projeto em vários frameworks, a partir de
um modelo padrão
● Promover a comparação entre os frameworks existentes
● Criar um modelo padrão para implementação de futuros projetos
● Tirar dúvidas básicas de configuração e implementação
● Ideia de Abdala Cerqueira, criada em 2012
11. Mas isso é suficiente?
Comparação difícil quando temos:
● Programadores diferentes
● Estilos de codificação diferentes
● Apenas código
● Sem orientação da lógica utilizada
● Versões obsoletas depois de um tempo
12. O que fazer, então?
● Estudar os frameworks
● Definir os aspectos a serem levados em conta
● Definir um projeto básico a ser implementado neles
● Utilizar apenas o que eles oferecem
● Usar bibliotecas externas apenas se estiver explícito
na documentação
● Botar a mão na massa!
13. O projeto
● Um BLOG
● 3 tipos de usuários (admin, user e guest)
● Posts
● Comentários
● Área administrativa
● Validação por email
14. Os aspectos
● Instalação
● Configurações
● Acesso ao BD
● Template engine
● Rotas
● Autenticação
● Autorização
● Documentação
● Formulários
● Validação
● Envio de Emails
● Paginação
● Tradução de textos
● Migrations
17. Criando o projeto
composer create-project laravel/laravel blog --prefer-dist
Framework completo instalado, com todos os pacotes
Deve ser instalado como uma extensão do PHP.
phalcon project blog simple --template-engine=volt
composer create-project -s dev zendframework/skeleton-application blog
Pacotes adicionais devem ser instalados conforme necessário
composer create-project -s dev zendframework/zendframework blog → Framework completo, com todos os pacotes
composer create-project symfony/skeleton blog
Pacotes adicionais devem ser instalados conforme necessário
18. Ferramentas RAD
artisan
e o tinker!!!
Instalado separadamente, via git ou download
devtools
zendtool
composer require symfony/console
console
24. Autenticação
php artisan make:auth 😎
Cria cadastro e recuperação de senha, login, formulários, rotas e já deixa preparada a
estrutura para validação de e-mail
Limita-se a oferecer algumas ferramentas para gerenciamento de sessão, e geração/
verificação de senha. Exige que criemos praticamente toda a lógica de autenticação. 😒
composer require zendframework/zend-authenticator
Apesar de poderoso, não é nem um pouco prático e exige muita configuração e o uso de
muitas classes (MUITO CÓDIGO). 😱
composer require maker-bundle --dev
php bin/console make:auth e responde algumas perguntas 😄
Cria cadastro, login, formulários e rotas
25. Autorização
Policies 😍
php artisan make:policy PostPolicy --model=Post
ACL - Lista de Controle de Acesso
RBAC - Controle de acesso baseado em papéis
ACL - Lista de Controle de Acesso
composer require symfony/security-bundle
security.yaml, inserção em código ou annotations 😃
26. Migrations
php artisan make:seeder PostsSeeder
php artisan db:seed
Faker - Criação de conteúdo aleatório 😉
phalcon migration generate 😍
phalcon migration run
Classes versionadas
Faz na mão mesmo… 😒
composer require --dev doctrine/doctrine-fixtures-bundle
php bin/console make:fixtures
php bin/console doctrine:fixtures:load
27. Tradução de textos
{{ __('Translate this') }}
Fácil de encontrar pacotes de tradução prontos
Diferencia tradução de atributos e textos em geral
Bastante personalizável
Exige um pouco de configuração 😓
Organizado e simples de usar
composer require zendframework/zend-mvc-i18n
Bastante flexível e personalizável
composer require symfony/translation
{{ 'Translate this'|trans }} ou {% trans %} Translate this {% endtrans %}
php bin/console translation:update --dump-messages --output-format=yaml --force pt 😍
28. Visão geral
Configuração Simples e organizada.
Documentação Excelente na maior parte, mas contém algumas falhas.
Estrutura de pastas Padrão simples, não muito flexível.
Formulários Validação prática. Segurança contra CSRF. Não oferece,
nativamente, ferramentas para gerar campos do formulário.
Paginação Super simples de implementar, oferece diversos tipos.
E-mails Oferece uma API bastante simples e fácil de implementar.
Comunidade Enorme e extremamente ativa.
Extremamente prático e produtivo
Pouca codificação
29. Visão geral
Configuração Simples e organizada.
Documentação Incompleta e muitas vezes confusa. Deficiente nas traduções.
Estrutura de pastas Padrão simples, bastante flexível e personalizável.
Formulários Muitos recursos de validação, nem sempre muito práticos.
Segurança contra CSRF. Geração de campos de formulário.
Paginação Ferramenta simples. Não oferece template pronto.
E-mails Não oferece uma API própria.
Comunidade Modesta, mas vem crescendo.
Extremamente performático
Instalação e atualização de versão
podem ser complicadas
30. Visão geral
Configuração Complicada, exige criação de muitas classes, muito código.
Documentação Bastante completa, mas poderia ter mais exemplos práticos.
Estrutura de pastas Bastante flexível e personalizável.
Formulários Ferramenta para criação poderosa. Muitas ferramentas para
validação e filtros.
Paginação Ferramenta robusta. Não oferece template pronto.
E-mails Ferramenta com diversas classes de transporte.
Comunidade Muito grande, mas vem perdendo espaço.
Muito robusto e completo
Código muito bem testado
Adequado para sistemas muito grandes
31. Visão geral
Configuração Simples e organizada.
Documentação Bastante completa, com bons exemplos práticos.
Estrutura de pastas Padrão simples, não muito flexível.
Formulários Ferramenta para criação poderosa. Muitas ferramentas para
validação e filtros. Segurança contra CSRF.
Paginação Não oferece uma API própria.
E-mails Utiliza o SwiftMailer (API própria em desenvolvimento)
Comunidade Muito grande e ativa.
Muito robusto, flexível e produtivo
Faz bastante uso de ferramentas externas consolidadas
32. Diferenciais
Produtividade
Performance
Controle
Flexibilidade
● Gera muita coisa automática
● Foco nas regras de negócio
● Código compilado
● Não precisa ser interpretado
● Nada acontece sem que você saiba como
● Permite instalar apenas o que precisar
● Permite instalar apenas o que precisar
● Aproveita o melhor de outras ferramentas
33. Conclusão
● Não existe “bala de prata”!
● A escolha por um framework vai depender de:
○ Tamanho e necessidades do projeto
○ Tamanho e experiência da equipe
○ Exigências de performance
○ Acesso ao servidor e suas configurações
○ Importância do controle
○ Interação com outras ferramentas
○ Tempo disponível
34. Depois dessa trabalheira toda… compartilhar!
● Especificações do projeto
● Orientações de instalação
● Passo-a-passo da implementação
● Resumo de cada framework
● Comparação e conclusões
AGUARDEM!