• 30 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 13/05/2019

Utilisons Flex pour ajouter des briques

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

La philosophie de Symfony en version 4 est de ne s'installer qu'avec le strict minimum pour exécuter une application web. Pour chaque besoin supplémentaire, c'est au développeur d'ajouter les briques supplémentaires dont il a éventuellement besoin.

Pour vous en rendre compte, jetez un œil au répertoire  /vendor/symfony . Je compte 16 éléments. Allez maintenant sur symfony.com/components qui liste l'ensemble des composants de Symfony, j'en compte plus de 50 !

Symfony Flex

Si Symfony4 peut se permettre d'avoir cette approche, c'est grâce à Symfony Flex.

Flex est un outil Symfony qui permet d'ajouter des nouvelles briques en déployant le moins d'effort possible. En effet, l'ajout d'une brique dans une application nécessite souvent d'ajouter un minimum de configuration, d'enregistrer des nouvelles routes, etc. Nous verrons tout cela en détail pour bien comprendre comment cela fonctionne. Mais sachez que Flex permet d'automatiser pour gagner du temps.

Flex fonctionne comme un plugin Composer. Je vous avais prévenu : Composer est un outil incontournable :p Pour certaines bibliothèques que vous ajoutez via Composer, Flex va venir s'exécuter en plus pour ajouter la configuration, copier les fichiers qui vont bien, etc.

Quelles sont ces "certaines" bibliothèques ?

Ce sont toutes celles répertoriées sur symfony.sh, et appelées recettes (recipes en anglais). Une recette, c'est justement ce qui explique quelle configuration ajouter au projet lors de l'ajout de cette bibliothèque.

Ces recettes correspondent donc à des bibliothèques standards disponibles via Composer (et donc listées sur packagist.org), mais qui comprennent ce petit plus qui indique la configuration à ajouter dans un projet Symfony. En effet une recette n'est utile que si vous travaillez avec Symfony, car la configuration d'un projet Symfony suit des conventions (nous en reparlerons). Si vous réalisez un projet sans Symfony, alors Flex n'a aucun moyen de savoir comment configurer votre projet tout seul !

Installons la recette Logger

Je vous propose d'installer votre première recette, cela vous permettra de voir concrètement comment fonctionne Flex.

Équivalence recette - bibliothèque

Pour l'exemple, nous allons installer la recette logger , qui permet d'écrire dans des fichiers log ce qu'il se passe dans votre application. Indispensable pour déboguer une application en production !

Le nom de la recette ( logger ,  log , ou encore  logging ) correspond à une bibliothèque, mais Composer et Packagist ne reconnaissent pas ce nom, seul symfony.sh le connait. Pour savoir à quelle bibliothèque correspond cette recette, Composer va donc d'abord demander à symfony.sh. Faites pareil, tapez simplement  logger  dans la barre de recherche de symfony.sh et vous verrez que la bibliothèque correspondante est  symfony/monolog-bundle. Ceci est un nom standard que Composer connaît. Vous pouvez même voir un lien  Package details  qui pointe vers Packagist.

La commande  composer require

Pour installer effectivement la recette, nous allons donc utiliser Composer, dont Flex est un plugin.

C:\wamp\www> composer require logger

Using version ^3.1 for symfony/monolog-bundle
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 3 installs, 0 updates, 7 removals
 - Installing monolog/monolog (1.23.0): Loading from cache
 - Installing symfony/monolog-bridge (v4.0.4): Loading from cache
 - Installing symfony/monolog-bundle (v3.1.2): Loading from cache
Writing lock file
Generating autoload files
Symfony operations: 3 recipes (3a61fdc47f242b754473405167e2a076)
 - Configuring symfony/monolog-bundle (>=3.1): From github.com/symfony/recipes:master
Executing script cache:clear [OK]
Executing script assets:install --symlink --relative public [OK]

Some files may have been created or updated to configure your new packages.
Please review, edit and commit them: these files are yours.

Essayons de comprendre ce qu'à fait Composer ici.

Déjà, dès la première ligne vous voyez que Composer a compris que c'est la bibliothèquesymfony/monolog-bundle  qu'il faut installer, et ceci grâce à Flex.

Ensuite, Composer a installlé les dépendances de cette bibliothèque, comme il l'aurait fait avec n'importe quelle bibliothèque, indépendamment de Flex.

Enfin, à la section  Symfony operations , Composer a appliqué la recette en elle-même. Comment ? Grâce au fichier de la recette, que vous pouvez trouver à l'adresse indiquée par Composer https://github.com/symfony/recipes puis allez dans  symfony/monolog-bundle/3.1 . Voici le contenu du fichier  manifest.json , qui définit le comportement de la recette :

{
    "bundles": {
        "Symfony\\Bundle\\MonologBundle\\MonologBundle": ["all"]
    },
    "copy-from-recipe": {
        "config/": "%CONFIG_DIR%/"
    },
    "aliases": ["log", "logger", "logging", "logs", "monolog"]
}

La troisième section aliases correspond aux différents noms ou raccourcis avec lesquels vous pouvez installer cette recette. Nous avons fait  composer require logger  , mais nous aurions pu faire  composer require logging  , etc.

Les deux autres section, bundles et copy-from-recipe sont plus intéressantes. Étudions-les.

Les bundles Symfony

Dans une application Symfony, un bundle est l'équivalent d'un plugin. C'est une bibliothèque qui, une fois enregistrée dans notre application, ajoute des fonctionnalités au framework.

Dans les bibliothèques qu'on vient d'installer, il faut donc distinguer :

  • monolog/monolog  est la bibliothèque qui contient effectivement le logger. C'est une bibliothèque qui permet de loguer... ce qu'on lui dit de loguer ! Elle ne prend pas d'initiative, et si vous n'ajoutez que celle-là, il ne se passera rien dans votre application. Cette bibliothèque fonctionne quel que soit le framework que vous utilisez, Symfony ou non.

  • symfony/monolog-bundle  est la bibliothèque du bundle qui intègre Monolog dans une application Symfony. C'est le bundle qui va s'intégrer dans votre application, et dire à Monolog "Une nouvelle page est chargée, voici ce que tu dois loguer : blablabla".

La section  bundles  de la recette indique donc à Flex d'ajouter ce bundle précis à la liste des bundles que notre application Symfony charge. Si vous ouvrez le fichier  config/bundles.php , vous voyez que Flex a bien ajouté ce bundle à la fin de la liste, conformément à la recette.

C'est parce que le bundle est dans cette liste qu'il sera chargé par Symfony et pourra loguer des informations.

La configuration Symfony

La configuration de notre application se trouve dans le répertoire  config .

Elle se compose de plusieurs fichiers organisés :

  • A la racine du répertoire pour nos propres fichiers (services, routes, nous en reparlerons) ;

  • Dans le répertoire packages pour la configuration des bundles tiers que nous utilisons.

Lors de l'installation de la recette, la section copy-from-recipe de celle-ci indique à Flex de copier les fichiers de configuration qui se trouvent dans son répertoire  config , et de les mettre dans le répertoire  %CONFIG_DIR% de notre application (à savoir le répertoire  config ). Et en effet, allez vérifier, Flex a créé ces trois nouveaux fichiers dans notre application :  config/packages/dev/monolog.yaml ,  config/packages/prod/monolog.yaml  et  config/packages/test/monolog.yaml .

Vous avez peut-être remarqué que certains répertoires correspondent aux noms de nos environnements « dev », « prod » et « test ». En effet, Symfony va prendre soin de charger les fichiers de configuration se trouvant dans l'environnement courant. Cela nous permet d'avoir des valeurs de configuration différentes suivant l’environnement. Nous aurons l'occasion d'en reparler plus tard.

En résumé

  • Flex est un nouveau moyen pour gérer des applications Symfony ;

  • Les recettes Flex sont un moyen d'automatiser la configuration de bundles tlers ;

  • Flex facilite donc l'installation, la configuration et la désinstallation de bundles tiers.

Exemple de certificat de réussite
Exemple de certificat de réussite