Symfony Flex & Dependency Injection Symfony Live São Paulo 2019
Gabriel Machado Autor nas trilhas de Cloud Symfony Live São Paulo 2019 gmsantos gmsantos__ gmsantos gmsantos
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)
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”
E se você pudesse ter ambos?
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
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
symfony/skeleton Symfony Live São Paulo 2019
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": "*" },
Estrutura de diretórios Symfony Live São Paulo 2019
Demo Criação de um novo projeto Symfony Live São Paulo 2019
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
Prefetch e Downloads em paralelo de dependências Symfony Live São Paulo 2019
extra.symfony.require Symfony Live São Paulo 2019 "extra": { "symfony": { "allow-contrib": false, "require": "4.3.*" } }
{ "bundles": { "SymfonyBundleFrameworkBundleFrameworkBundle": ["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
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 ✨
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.
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
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
flex.symfony.com Symfony Live São Paulo 2019
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/
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']
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
<?php namespace AppService; use AppUtilRot13Transformer; class TwitterClient { private $transformer; public function __construct(Rot13Transformer $transformer) { $this->transformer = $transformer; } } autowire Symfony Live São Paulo 2019
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
<?php use SymfonyComponentEventDispatcherEventSubscriberInterface; use SymfonyComponentHttpKernelKernelEvents; class SetHeaderSusbcriber implements EventSubscriberInterface { public static function getSubscribedEvents() { return [ KernelEvents::RESPONSE => 'onKernelResponse’ ]; } } autoconfigure Symfony Live São Paulo 2019
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
<?php use PsrLogLoggerInterface; 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
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/
Avalie essa palestra https://joind.in/talk/1e84c Symfony Live São Paulo 2019 Symfony Brasil SymfonyBrasil
Obrigado! Symfony Live São Paulo 2019 gmsantos gmsantos__ gmsantos gmsantos

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 nastrilhas de Cloud Symfony Live São Paulo 2019 gmsantos gmsantos__ gmsantos gmsantos
  • 3.
    Evolução dos Frameworks 2001–2009 PrimeirosFrameworks • 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ãoPaulo 2019 Micro framework Leve Altamente customizável “Rápido” Ideal para microservices Full Stack Framework Completo (funcionalidades) Integrado Padronizado Fácil de “deployar”
  • 5.
  • 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 umprojeto 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
  • 8.
  • 9.
    symfony/skeleton Symfony Live SãoPaulo 2019 "require": { "php": "^7.1.3", "ext-ctype": "*", "ext-iconv": "*", "symfony/console": "*", "symfony/dotenv": "*", "symfony/flex": "^1.1", "symfony/framework-bundle": "*", "symfony/yaml": "*" },
  • 10.
  • 11.
    Demo Criação de umnovo projeto Symfony Live São Paulo 2019
  • 12.
    Symfony Flex Symfony LiveSã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
  • 13.
    Prefetch e Downloadsem paralelo de dependências Symfony Live São Paulo 2019
  • 14.
    extra.symfony.require Symfony Live SãoPaulo 2019 "extra": { "symfony": { "allow-contrib": false, "require": "4.3.*" } }
  • 15.
    { "bundles": { "SymfonyBundleFrameworkBundleFrameworkBundle": ["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
  • 16.
    Recipes Symfony Live SãoPaulo 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 SymfonyLive 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ênciasque são agrupadas e instaladas de uma só vez Exemplos: profiler, debug, orm, serializer, encore Symfony Live São Paulo 2019
  • 19.
    Comandos extras parao Composer Symfony Live São Paulo 2019 $ composer symfony:sync-recipes $ composer symfony:generate-id $ composer symfony:dump-env $ composer symfony:unpack
  • 20.
  • 21.
    Contribuindo com asRecipes 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 LiveSã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ãoPaulo 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
  • 24.
    <?php namespace AppService; use AppUtilRot13Transformer; classTwitterClient { private $transformer; public function __construct(Rot13Transformer $transformer) { $this->transformer = $transformer; } } autowire Symfony Live São Paulo 2019
  • 25.
    autoconfigure Symfony Live SãoPaulo 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
  • 26.
    <?php use SymfonyComponentEventDispatcherEventSubscriberInterface; use SymfonyComponentHttpKernelKernelEvents; classSetHeaderSusbcriber implements EventSubscriberInterface { public static function getSubscribedEvents() { return [ KernelEvents::RESPONSE => 'onKernelResponse’ ]; } } autoconfigure Symfony Live São Paulo 2019
  • 27.
    Tag controller.service_argument Symfony LiveSã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
  • 28.
    <?php use PsrLogLoggerInterface; class InvoiceController { publicfunction listInvoices(LoggerInterface $logger) { $logger->info('A new way to access services!’); } } Tag controller.service_argument Symfony Live São Paulo 2019
  • 29.
    Referências Symfony Live SãoPaulo 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/
  • 30.
    Avalie essa palestra https://joind.in/talk/1e84c SymfonyLive São Paulo 2019 Symfony Brasil SymfonyBrasil
  • 31.
    Obrigado! Symfony Live SãoPaulo 2019 gmsantos gmsantos__ gmsantos gmsantos

Notas do Editor

  • #12 Roteiro: > composer create-project symfony/skeleton=v4.0.0-BETA1 flex > php -S 127.0.0.1:8000 -t public > composer require webserver log > cp ../sample/DefaultController.php src/Controller Descomentar / no routes.yml > bin/console server:start > composer require profiler admin > cp ../sample/Product.php src/Entity Configurar .env e incluir resolver na config doctrine > bin/console doctrine:schema:update Navegar /admin e criar Produto > composer remove admin