Symfony 4 / Flex / DIC - AFSY Nantes 2018

Symfony 4 / Flex / DIC - AFSY Nantes 2018

7602f2751868682b296171f58589c851?s=128

Grégoire Pineau

February 23, 2018
Tweet

Transcript

  1. Symfony 4 / Flex / DIC Grégoire Pineau - @lyrixx

    AFUP Nantes - Février 2018
  2. Nouveau DIC (SF 3.4)

  3. 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)
  4. 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
  5. 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
  6. 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.
  7. “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}'
  8. 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) { // ... }
  9. 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]
  10. Et les parameters ? Binding automatique d’un nom de variable

    vers un parameter (ou un scalar) services: _defaults: bind: $projectDir: '%kernel.project_dir%'
  11. 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']
  12. Symfony Flex

  13. 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
  14. Qu’est ce que c’est ? Faciliter l'ajout/la suppression de dépendances

    Avoir une configuration par défaut qui fonctionne immédiatement
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. Symfony 4

  21. Symfony 3.4 sans la couche de compatibilité Nouvelle structure des

    dossiers Symfony 4?
  22. • 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
  23. Nouvelle Structure

  24. Démo ?

  25. Merci Des bières ?