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

Symfony 4 / Flex / DIC - Lausanne 2018

Symfony 4 / Flex / DIC - Lausanne 2018

Grégoire Pineau

June 18, 2018
Tweet

More Decks by Grégoire Pineau

Other Decks in Programming

Transcript

  1. Autowire L’Autowiring a été repensé (depuis la 3.3) L’id du

    service doit être le FQCN de la classe # Avant services: app.rot13.transformer: class: App\Util\Rot13Transformer parameters: [ @logger, ... ] # --- # $this->get('app.rot13.transformer') # Après services: App\Util\Rot13Transformer: autowire: true # --- # $this->get(Rot13Transformer::class)
  2. Autoconfigure Permet de configurer un service en fonction de ses

    contrats (interfaces) Exemple : Une classe qui implémente “EventSubscriberInterface” sera automatiquement taguée “event.kernel_subscriber” # Avant services: app.rot13.transformer: class: App\Util\Rot13Transformer tags: [kernel.event_subscriber] # Après services: app.rot13.transformer: class: App\Util\Rot13Transformer autoconfigure: true
  3. Public Tous les services sont désormais privés (1) (2) Tous

    les services non utilisés sont supprimés du container compilé 1) Sauf quelques exceptions 2) Avec la configuration par défaut
  4. Default Mais tout est optin : il faut configurer autowire

    / autoconfigure / public services: # default configuration for services in this file _defaults: autowire: true # Automatically injects dependencies in your services. autoconfigure: true # Automatically registers your services as commands, etc. public: false # Allows optimizing the container by removing unused services; # this also means fetching services directly from the # container via $container->get() won't work.
  5. “Autodiscovery” Mais où symfony va-t-il chercher les services ? services:

    # makes classes in src/ available to be used as services # this creates a service per class whose id is the fully-qualified class name App\: resource: '../src/*' exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
  6. Le cas des controllers Il est recommandé de faire des

    “controllers as a service” Il est possible d’auto-injecter dans les actions des services services: # controllers are imported separately to make sure services can be injected # as action arguments even if you don't extend any base controller class App\Controller\: resource: '../src/Controller' tags: ['controller.service_arguments'] # public function contact(Request $request, Mailer $mailer) { // ... }
  7. Les services taggués Ex : Injecter tous les services taggués

    “twig.extension” dans un autre service services: App\Manager\TwigManager: arguments: [!tagged twig.extension]
  8. Et les parameters ? Binding automatique d’un nom de variable

    vers un parameter (ou un scalar) services: _defaults: bind: $projectDir: '%kernel.project_dir%'
  9. Tout ensemble - Le nouveau services.yml parameters: services: _defaults: autowire:

    true autoconfigure: true public: false App\: resource: '../src/*' exclude: '../src/{Entity,Migrations,Tests,Kernel.php}' App\Controller\: resource: '../src/Controller' tags: ['controller.service_arguments']
  10. Qu’est ce que c’est ? Nouvelle façon de créer une

    application Symfony Plugin Composer Automatise l'installation de package / bundle Requiert PHP 7.0 et la structure de Symfony 4
  11. Qu’est ce que c’est ? Faciliter l'ajout/la suppression de dépendances

    Avoir une configuration par défaut qui fonctionne immédiatement
  12. Installation d'un bundle : sans Flex composer require mon-package Instancier

    le(s) bundle(s) dans le Kernel Créer la configuration dans app/config/config.yml Importer le routing dans app/config/routing.yml
  13. Installation d'un bundle : avec Flex composer require mon-package Instancier

    le(s) bundle(s) dans le Kernel Créer la configuration dans app/config/config.yml Importer le routing dans app/config/routing.yml
  14. Les recipes (recettes) décrivent comment un paquet s’installe / se

    configure Il y a des recipes officielles, validées par la core team : github.com/symfony/recipes Et les recipes contrib github.com/symfony/recipes-contrib Flex utilise des recipes
  15. Définie une configuration par défaut • Bundle(s) à instancier •

    Fichiers (config, routing ou autre) à créer • Paramètre à ajouter dans le DIC • Entrées à ajouter dans .gitignore, .env, etc • Tâche(s) à lancer après l'installation Une recipe Flex
  16. Système d'alias : composer req admin va automatiquement télécharger et

    installer javiereguiluz/easyadmin-bundle Les alias ne sont possibles qu’avec les recipes officielles. Système de "pack" : composer req orm va automatiquement installer : • doctrine/orm • doctrine/doctrine-bundle • doctrine/doctrine-migrations-bundle Les alias et les packs
  17. • app/AppKernel.php => src/Kernel.php • app/config/parameters.yml ~> .env • app/config/*

    => config/* • app/resources/{assets, translations}/ => {assets, translations}/ • app/resources/views/ => templates/ • src/{App, …}Bundle/ => src/ • web/ => public/ • web/app_*.php => public/index.php • .yml => *.yaml Nouvelle Structure