22/01/2023

3. Console

Lu 456 fois Licence Creative Commons

Console

La console de l'application est le programme situé dans bin/console. Il est construit à partir du composant Console et fournit des commandes très utiles lors du développement.
Listez les commandes disponibles:

php bin/console
[output]Symfony 5.4.18 (env: dev, debug: true) #StandWithUkraine https://sf.to/ukraine
[output]...
[output]  secrets:set                 Set a secret in the vault

Exécutons quelques commandes pour rappeler ce que nous avons vu jusqu'ici.

Symfony n'utilise pas de système de pages mais des routes. Listez les routes actuellement configurées:

php bin/console debug:router
[output] ---------------------- ------------- ------------- -------- --------------------------------------
[output]  Name                 Method    Scheme   Host   Path
[output] ---------------------- ------------- ------------- -------- --------------------------------------
[output]  _preview_error   ANY          ANY         ANY    /_error/{code}.{_format}
[output] ---------------------- ------------- ------------- -------- --------------------------------------

Les bundles sont configurés en YAML. Dans les fichiers de configuration, la clé de premier niveau désigne le bundle concerné. Afficher la configuration courante pour framework.router:

php bin/console debug:config framework router
[output]
[output]Current configuration for "framework.router"
[output]============================================
[output]
[output]resource: 'kernel::loadRoutes'
[output]type: service
[output]enabled: true
[output]utf8: true
[output]default_uri: null
[output]http_port: 80
[output]https_port: 443
[output]strict_requirements: true

Le conteneur de services contient des services organisés par identifiant. Afficher les informations du service App\Kernel:

php bin/console debug:container App\Kernel
[output]
[output] // This service is a public alias for the service kernel                                                               
[output]
[output]Information for Service "kernel"
[output]================================
[output]
[output] ----------------------- ------------------------------ 
[output]  Option                 Value
[output] ----------------------- ------------------------------ 
[output]  Service ID            kernel
[output]  Class                    App\Kernel
[output]  Tags                     controller.service_arguments
[output]                              routing.route_loader
[output]  Public                   yes
[output]  Synthetic             yes
[output]  Lazy                     no
[output]  Shared                 yes
[output]  Abstract               no
[output]  Autowired            no
[output]  Autoconfigured    yes
[output] ----------------------- ------------------------------ 

MakerBundle & Twig

Installons 2 nouvelles dépendances:

  • le MakerBundle qui ajoute des commandes make:* à la console pour facilement générer des classes (controlleurs, formulaires, ...)
  • Twig qui est un moteur de template avec sa propre syntaxe. À utiliser pour nos templates HTML.

Installez les 2 dépendances avec les commandes suivantes:

composer require twig
[output] ...
[output]Symfony operations: 2 recipes (dddc29b27ac1fb88c4d6309a97dc55f3)
[output]  - Configuring symfony/twig-bundle (>=5.4): From github.com/symfony/recipes:main
[output]  - Configuring twig/extra-bundle (>=v3.5.0): From auto-generated recipe
[output]Unpacking Symfony packs
[output]  - Unpacked symfony/twig-pack
[output]Loading composer repositories with package information
[output]Updating dependencies
[output]Nothing to modify in lock file
[output]Installing dependencies from lock file (including require-dev)
[output]Package operations: 0 installs, 0 updates, 1 removal
[output]  - Removing symfony/twig-pack (v1.0.1)
[output] ...
composer req maker --dev
[output] ...
[output]Symfony operations: 1 recipe (5f3944ed353e6b356fc4c281b207010f)
[output]  - Configuring symfony/maker-bundle (>=1.0): From github.com/symfony/recipes:main
[output] ...

D'après ce qu'affiche la commande, quels mécanismes de Symfony Flex ont été exécutés ?

  • les alias: twig correspond à symfony/twig-pack et maker à symfony/maker-bundle.
  • l'unpacking (désempaquetage): le package symfony/twig-pack a été supprimé du composer.json et remplacé par les 3 packages qu'il contenait.
  • les recipes: une recipes a été exécutée pour chacun des 3 bundles installés.

Symfony Flex a donc enregistré ces 3 bundles dans symfony.lock, les a activés dans /config/bundles.php et en ce qui concerne Twig, la recipe a ajouté le fichier de configuration /config/packages/twig.yaml et un dossier /templates/.

Les bundles étant activés, ils sont "branchés" à l'application par le conteneur de services. Concernant le MakerBundle, il a ajouté des commandes à la console:

php bin/console
[output] ...
[output] make
[output]  make:auth                                 Creates a Guard authenticator of different flavors
[output]  make:command                        Creates a new console command class
[output]  make:controller                         Creates a new controller class
[output]  make:crud                                 Creates CRUD for Doctrine entity class
[output]  make:docker:database              Adds a database container to your docker-compose.yaml file
[output]  make:entity                               Creates or updates a Doctrine entity class, and optionally an API Platform resource
[output]  make:fixtures                            Creates a new class to load Doctrine fixtures
[output]  make:form                                 Creates a new form class
[output]  make:message                          Creates a new message and handler
[output]  make:messenger-middleware   Creates a new messenger middleware
[output]  make:migration                         Creates a new migration based on database changes
[output]  make:registration-form             Creates a new registration form system
[output]  make:reset-password                Create controller, entity, and repositories for use with symfonycasts/reset-password-bundle
[output]  make:serializer:encoder            Creates a new serializer encoder class
[output]  make:serializer:normalizer        Creates a new serializer normalizer class
[output]  make:stimulus-controller          Creates a new Stimulus controller
[output]  make:subscriber                       Creates a new event subscriber class
[output]  make:test                                  [make:unit-test|make:functional-test] Creates a new test class
[output]  make:twig-component              Creates a twig (or live) component
[output]  make:twig-extension                Creates a new Twig extension with its runtime class
[output]  make:user                                Creates a new security user class
[output]  make:validator                         Creates a new validator and constraint class
[output]  make:voter                               Creates a new security voter class
[output] ...