O Symfony Flex é a nova forma de gerenciar aplicações baseadas em Symfony. Ele automatiza tarefas comuns como instalar ou remover bundles, acelera a instalação de dependências e permite a evolução gradual do seu projeto.
Vamos entender como ele funciona por baixo dos panos e o que pode melhorar no desenvolvimento dos nossos projetos.
Symfony Flex & Dependency Injection @ Symfony Live São Paulo 2019
1. Symfony Flex & Dependency Injection
Symfony Live São Paulo 2019
2. Gabriel Machado
Autor nas trilhas de Cloud
Symfony Live São Paulo 2019
gmsantos
gmsantos__
gmsantos
gmsantos
3. Evolução dos Frameworks
2001–2009
Primeiros Frameworks
• PHP 4
• Wordpress
• Symfony 1, Zend Framework 1, CodeIgniter
2009-2013
Modularização Frameworks
• PHP 5 (Namespaces, spl_autoloader)
• PHP-FIG PSR-0 (Autoload)
• Composer
• Synfony 2, Zend Framework 2, Laravel 4
2013-2017
Foco em Componentes e Micro frameworks
• The PHP League
• PSR (Log, Container, Cache, HTTP)
• Slim, Silex (RIP)
4. Comparação
Symfony Live São Paulo 2019
Micro framework
Leve
Altamente customizável
“Rápido”
Ideal para microservices
Full Stack Framework
Completo (funcionalidades)
Integrado
Padronizado
Fácil de “deployar”
6. O que é o Symfony Flex
Nova forma de gerenciar uma aplicação Symfony
Construído como um plugin do Composer
Foco na automação de tarefas e gerenciamento de dependências
Automatiza a configuração de pacotes e criação da estrutura da aplicação
Permite começar como um microframework e incluir novos components sob demanda
7. Como iniciar um projeto com Flex
Symfony Live São Paulo 2019
Para criar uma aplicação web completa
$ composer create-project symfony/website-skeleton app
Para criar um micro serviço, API ou aplicação CLI (console)
$ composer create-project symfony/skeleton app
12. Symfony Flex
Symfony Live São Paulo 2019
Prefetch e Downloads
em paralelo de
dependências
Resolução de
dependências
(extra.symfony.require)
Recipes para instalação,
atualização e remoção
de dependências
Suporte a Alias
Packs de dependências
Comandos extras para
o Composer
16. Recipes
Symfony Live São Paulo 2019
• bundles
• copy-from-recipe
• copy-from-package
• env
• container
• makefile
• composer-scripts
• gitignore
• dockerfile ✨ https://github.com/symfony/flex/pull/128
• docker-compose ✨
17. Suporte a Alias
Symfony Live São Paulo 2019
Alguns comandos que rodamos durante a demo:
$ composer require log annotation
$ composer require profiler server --dev
log, annotation, profiler, server não são pacotes válidos no packagist
(vendor/package)
Alias estão disponíveis somente para pacotes oficiais do Symfony.
18. Packs
Um grupo de
dependências que são
agrupadas e instaladas de
uma só vez
Exemplos: profiler, debug,
orm, serializer, encore
Symfony Live São Paulo 2019
19. Comandos extras para o Composer
Symfony Live São Paulo 2019
$ composer symfony:sync-recipes
$ composer symfony:generate-id
$ composer symfony:dump-env
$ composer symfony:unpack
21. Contribuindo com as Recipes
Symfony Live São Paulo 2019
Recipes oficiais
https://github.com/symfony/recipes/
Recipes comunidade
https://github.com/symfony/recipes-contrib/
22. Dependency Injection
Symfony Live São Paulo 2019
parameters:
services:
_defaults:
autowire: true
autoconfigure: true
App:
resource: '../src/*’
exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}’
AppController:
resource: '../src/Controller’
tags: ['controller.service_arguments']
23. autowire
Symfony Live São Paulo 2019
Maior preferencia pelo tipo da classe (FQN) do que service id
Injeção de dependências diretamente no construtor da classe a partir
do type-hint
25. autoconfigure
Symfony Live São Paulo 2019
Registra automaticamente suas classes como commands, event
subscribers
Somente implemente ou estenda uma classe específica e sua classe
receberá a tag necessária
27. Tag controller.service_argument
Symfony Live São Paulo 2019
Controllers agora são tratados como serviços
É opcional estender AbstractController
Aceitam injeção de dependências a partir do construtor via autowire
Com a tag controller.service_argument, os Controllers aceitam injeção
de dependências em qualquer método