Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Symfony Flex & Dependency Injection

Symfony Flex & Dependency Injection

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.

gmsantos

May 16, 2019
Tweet

Other Decks in Programming

Transcript

  1. Gabriel Machado Autor dos cursos de cloud computing Symfony Live

    São Paulo 2019 gmsantos gmsantos__ gmsantos gmsantos
  2. 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)
  3. 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”
  4. 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
  5. 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
  6. symfony/skeleton Symfony Live São Paulo 2019 "require": { "php": "^7.1.3",

    "ext-ctype": "*", "ext-iconv": "*", "symfony/console": "*", "symfony/dotenv": "*", "symfony/flex": "^1.1", "symfony/framework-bundle": "*", "symfony/yaml": "*" },
  7. 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
  8. { "bundles": { "Symfony\\Bundle\\FrameworkBundle\\FrameworkBundle": ["all"] }, "copy-from-recipe": { "config/": "%CONFIG_DIR%/",

    "src/": "%SRC_DIR%/" }, "composer-scripts": { "cache:clear": "symfony-cmd", "assets:install %PUBLIC_DIR%": "symfony-cmd" }, "env": { "APP_ENV": "dev", "#TRUSTED_HOSTS": "'^localhost|example\\.com$’” }, "gitignore": [ "/.env.local", "/vendor/" ] } Recipes Symfony Live São Paulo 2019
  9. 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 ✨
  10. 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.
  11. 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
  12. 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
  13. 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/
  14. 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}’ App\Controller\: resource: '../src/Controller’ tags: ['controller.service_arguments']
  15. 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
  16. <?php namespace App\Service; use App\Util\Rot13Transformer; class TwitterClient { private $transformer;

    public function __construct(Rot13Transformer $transformer) { $this->transformer = $transformer; } } autowire Symfony Live São Paulo 2019
  17. 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
  18. <?php use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\KernelEvents; class SetHeaderSusbcriber implements EventSubscriberInterface {

    public static function getSubscribedEvents() { return [ KernelEvents::RESPONSE => 'onKernelResponse’ ]; } } autoconfigure Symfony Live São Paulo 2019
  19. 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
  20. <?php use Psr\Log\LoggerInterface; class InvoiceController { public function listInvoices(LoggerInterface $logger)

    { $logger->info('A new way to access services!’); } } Tag controller.service_argument Symfony Live São Paulo 2019
  21. Referências Symfony Live São Paulo 2019 https://symfony.com/doc/current/setup/flex.html https://symfony.com/blog/the-end-of-silex https://github.com/symfony/skeleton https://github.com/symfony/website-skeleton

    https://symfony.com/doc/current/logging.html https://symfony.com/doc/current/profiler.html https://symfony.com/doc/current/service_container.html https://symfony.com/doc/master/service_container/3.3-di-changes.html https://www.sitepoint.com/symfony-flex-paving-path-faster-better-symfony/