SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Downloaden Sie, um offline zu lesen
SEU FRAMEWORK
É MELHOR PRA QUÊ?
Jaime da Costa Pereira Neto
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
Vivemos em um mundo polarizado...
em que muitos acreditam que só pode existir
um melhor...
automaticamente o resto é perda de tempo...
e tudo é 100% bom ou 100% ruim...
em todos os aspectos de nossas vidas...
claro que os frameworks não ficam de fora!
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?
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
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
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!
O projeto
● Um BLOG
● 3 tipos de usuários (admin, user e guest)
● Posts
● Comentários
● Área administrativa
● Validação por email
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
Frameworks escolhidos
?
5.8.17 3.4.3 3 4.3.3
Mão na massa!
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
Ferramentas RAD
artisan
e o tinker!!!
Instalado separadamente, via git ou download
devtools
zendtool
composer require symfony/console
console
Servidor embutido
php artisan serve
phalcon serve
composer serve
composer require server --dev
php bin/console server:run
Models e controllers
php artisan make:model Post -m
php artisan make:controller PostController --resource
phalcon scaffold posts --get-set --template-engine=volt 😃
Faz na mão mesmo… 😖
composer require maker-bundle --dev
php bin/console make:entity
php bin/console make:controller PostController
Consulta no BD com paginação
$posts = Post::orderBy('id', 'desc')->paginate(10); 😍
$posts = Posts::find(['order' => 'id desc']);
$paginator = new Paginator(['data' => $posts, 'limit'=> 10, 'page' => $page]);
$paginator->getPaginate();
require zendframework/zend-db composer require zendframework/zend-paginator
$posts = new Select('posts')->order('id desc');
$paginator = new Paginator(new AdapterArrayAdapter($posts));
$paginator->setItemCountPerPage(10)->setCurrentPageNumber($page); 😩
composer require symfony/orm-pack Dentro da classe PostRepository:
$this->createQueryBuilder('p')->orderBy('p.id', 'desc')->setFirstResult($limit * ($page - 1))
->setMaxResults($limit)->getQuery()->getResult();
Template engine
blade {!! $post->title !!} {{ ... }} {{-- … --}} @if ... @endif
volt {{ post.title|e }} {% … %} {# … #}
ou phtml
phtml <?= $this->escapeHtml($post->title) ?> <?php … ?>
flexível para utilizar outros
composer require template
twig {{ post.title|e }} {% … %} {# … #}
Rotas
Route::get('/foo', 'FooController@index')->name('foo.index');
Route::post('/bar', 'BarController@index')->name('bar.index');
$router->add('/foo', ['controller' => 'foo', 'action' => 'index' ]);
$router->add('/bar', ['controller' => 'bar', 'action' => 'index' ]);
composer require zendframework/zend-router
$router->addRoute('foo', Method::factory(['route' => '/foo',
'verb' => 'post,get', 'defaults' => ['controller' => 'foo', 'action' => 'index']]));
composer require annotations
/** @Route('/foo', name='foo_index') */ 😃
Pode restringir o protocolo HTTP se definido em routes.yaml
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
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 😃
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
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 😍
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
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
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
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
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
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
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!
Dúvidas?
jaime neto
contato@jaimeneto.com
http://jaimeneto.com
@jaimecpn
OBRIGADO!

Weitere ähnliche Inhalte

Was ist angesagt?

Mini curso de django
Mini curso de djangoMini curso de django
Mini curso de djangorosenclever
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVMWilliam Gouvea
 
O que esperar do Zend Framework 3
O que esperar do Zend Framework 3O que esperar do Zend Framework 3
O que esperar do Zend Framework 3Flávio Lisboa
 
O que esperar do Zend Framework 2
O que esperar do Zend Framework 2O que esperar do Zend Framework 2
O que esperar do Zend Framework 2Flávio Lisboa
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHPPaulo Dayvson
 
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e WebdriverJúlio de Lima
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX Sérgio Souza Costa
 
Segurança em Aplicações Web com PHP
Segurança em Aplicações Web com PHPSegurança em Aplicações Web com PHP
Segurança em Aplicações Web com PHPGedvan Dias
 
Conhecendo o Zend Framework
Conhecendo o Zend FrameworkConhecendo o Zend Framework
Conhecendo o Zend FrameworkJaime Neto
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoLuiz Junior
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da ZendDomingos Teruel
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPDaniel Brandão
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPiMasters
 
Começando com Zend Framework 2
Começando com Zend Framework 2Começando com Zend Framework 2
Começando com Zend Framework 2Cezar Souza
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panosLaís Lima
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Willian Magalhães
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteMichael Cardoso
 

Was ist angesagt? (20)

Mini curso de django
Mini curso de djangoMini curso de django
Mini curso de django
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVM
 
O que esperar do Zend Framework 3
O que esperar do Zend Framework 3O que esperar do Zend Framework 3
O que esperar do Zend Framework 3
 
O que esperar do Zend Framework 2
O que esperar do Zend Framework 2O que esperar do Zend Framework 2
O que esperar do Zend Framework 2
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
Segurança em Aplicações Web com PHP
Segurança em Aplicações Web com PHPSegurança em Aplicações Web com PHP
Segurança em Aplicações Web com PHP
 
Conhecendo o Zend Framework
Conhecendo o Zend FrameworkConhecendo o Zend Framework
Conhecendo o Zend Framework
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao Avançado
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da Zend
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
 
Começando com Zend Framework 2
Começando com Zend Framework 2Começando com Zend Framework 2
Começando com Zend Framework 2
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil Competente
 
Mini Curso de PHP
Mini Curso de PHPMini Curso de PHP
Mini Curso de PHP
 
PHP - Introdução
PHP - IntroduçãoPHP - Introdução
PHP - Introdução
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 

Ähnlich wie Seu framework é melhor pra quê?

Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Luís Cobucci
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Luís Cobucci
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPMarcelo Andrade
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterEric Silva
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicRicardo Guerra Freitas
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Lucas Augusto Carvalho
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkFlávio Lisboa
 
ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010Norton Guimarães
 
Aula 1 -_ambiente_visual_studio_2012
Aula 1 -_ambiente_visual_studio_2012Aula 1 -_ambiente_visual_studio_2012
Aula 1 -_ambiente_visual_studio_2012Laís Vidal
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Vinícius de Paula
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizadosThiago Rodrigues
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2Cezar Souza
 

Ähnlich wie Seu framework é melhor pra quê? (20)

PHP Tools for Fast coding
PHP Tools for Fast codingPHP Tools for Fast coding
PHP Tools for Fast coding
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHP
 
Python 08
Python 08Python 08
Python 08
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
 
Programando php com excelência
Programando php com excelênciaProgramando php com excelência
Programando php com excelência
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010
 
Sapo Sessions PHP
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
 
Aula 1 -_ambiente_visual_studio_2012
Aula 1 -_ambiente_visual_studio_2012Aula 1 -_ambiente_visual_studio_2012
Aula 1 -_ambiente_visual_studio_2012
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizados
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
 
Cake Php
Cake PhpCake Php
Cake Php
 

Seu framework é melhor pra quê?

  • 1. SEU FRAMEWORK É MELHOR PRA QUÊ? Jaime da Costa Pereira Neto
  • 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
  • 3. Vivemos em um mundo polarizado...
  • 4. em que muitos acreditam que só pode existir um melhor...
  • 5. automaticamente o resto é perda de tempo...
  • 6. e tudo é 100% bom ou 100% ruim...
  • 7. em todos os aspectos de nossas vidas...
  • 8. claro que os frameworks não ficam de fora!
  • 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
  • 19. Servidor embutido php artisan serve phalcon serve composer serve composer require server --dev php bin/console server:run
  • 20. Models e controllers php artisan make:model Post -m php artisan make:controller PostController --resource phalcon scaffold posts --get-set --template-engine=volt 😃 Faz na mão mesmo… 😖 composer require maker-bundle --dev php bin/console make:entity php bin/console make:controller PostController
  • 21. Consulta no BD com paginação $posts = Post::orderBy('id', 'desc')->paginate(10); 😍 $posts = Posts::find(['order' => 'id desc']); $paginator = new Paginator(['data' => $posts, 'limit'=> 10, 'page' => $page]); $paginator->getPaginate(); require zendframework/zend-db composer require zendframework/zend-paginator $posts = new Select('posts')->order('id desc'); $paginator = new Paginator(new AdapterArrayAdapter($posts)); $paginator->setItemCountPerPage(10)->setCurrentPageNumber($page); 😩 composer require symfony/orm-pack Dentro da classe PostRepository: $this->createQueryBuilder('p')->orderBy('p.id', 'desc')->setFirstResult($limit * ($page - 1)) ->setMaxResults($limit)->getQuery()->getResult();
  • 22. Template engine blade {!! $post->title !!} {{ ... }} {{-- … --}} @if ... @endif volt {{ post.title|e }} {% … %} {# … #} ou phtml phtml <?= $this->escapeHtml($post->title) ?> <?php … ?> flexível para utilizar outros composer require template twig {{ post.title|e }} {% … %} {# … #}
  • 23. Rotas Route::get('/foo', 'FooController@index')->name('foo.index'); Route::post('/bar', 'BarController@index')->name('bar.index'); $router->add('/foo', ['controller' => 'foo', 'action' => 'index' ]); $router->add('/bar', ['controller' => 'bar', 'action' => 'index' ]); composer require zendframework/zend-router $router->addRoute('foo', Method::factory(['route' => '/foo', 'verb' => 'post,get', 'defaults' => ['controller' => 'foo', 'action' => 'index']])); composer require annotations /** @Route('/foo', name='foo_index') */ 😃 Pode restringir o protocolo HTTP se definido em routes.yaml
  • 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!