22/01/2023

0. Symfony Flex

Lu 563 fois Licence Creative Commons

Symfony Flex

Symfony Flex est un plugin pour Composer qui va simplifier l'installation de packages dans l'application.
À commencer par les alias: pour installer symfony/mailer on peut utiliser l'alias mailer ou mail

composer req mail

Retrouvez la liste des alias sur GitHub.

Flex peut également gérer les packages de type "pack". Ce sont des packages contenant plusieurs autres packages. Si on installe symfony/psr7-pack, Flex va le "désempaqueter" en ajoutant nyholm/psr7 & symfony/psr-http-message-bridge dans le composer.json.

Mais la fonctionnalité la plus intéressante de Symfony Flex est son système de recipes (recettes). C'est d'ailleurs comme ça que vous avez installé l'application.

Recipes

La commande composer create-project effectue habituellement une copie de la structure d'un package. Pourtant en regardant le GitHub de symfony/skeleton à partir duquel le projet a été instancié, on y retrouve seulement 2 fichiers alors que notre projet dispose d'une structure bien plus complexe.
Dans le composer.json on retrouvera quelques packages dans les blocs require et flex-require:

...
    "require": {
        "php": ">=7.2.5",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "symfony/flex": "^1.17|^2"
    },
    "flex-require": {
        "symfony/console": "*",
        "symfony/dotenv": "*",
        "symfony/framework-bundle": "*",
        "symfony/runtime": "*",
        "symfony/yaml": "*"
    },
...

Le bloc require ne contient concrètement que l'installation de Symfony Flex, et le bloc flex-require (dédié à Flex et non standard à la configuration de Composer) liste les dépendances minimales pour faire fonctionner notre application.

Pour certains packages, Flex va exécuter une recipe, ce qui peut ajouter des fichiers et en modifier d'autres. Ça permet d'installer automatiquement des fichiers de configuration, des classes PHP d'exemple, etc.
Les recipes officielles sont présentes dans le repository GitHub symfony/recipes et d'autres dans symfony/recipes-contrib. Regardons de plus près la recipe de symfony/framework-bundle.

FrameworkBundle

Le FrameworkBundle constitue le coeur de Symfony, et c'est dans sa recipe que l'on retrouvera la majeure partie de la structure de l'application.
Les recipes étant triées par package on ouvre donc symfony > framework-bundle. On trouve ensuite un dossier par version du package à partir de laquelle la recipe change, on ouvre désormais symfony > framework-bundle > 5.4.

Les dossiers /config/ , /public/ et /src/ sont exactement ceux présents dans notre application. La configuration de la recipe se trouve dans le fichier manifest.json:

  • le bloc bundles indique l'activation d'un bundle (sujet abordé plus tard)
  • le bloc copy-from-recipe liste les fichiers et dossiers qui doivent être copiés depuis la recipe vers l'application
  • le bloc env liste des variables d'environnements à ajouter au fichier .env (sujet abordé plus tard)
  • le bloc gitignore liste des pattern à ajouter au fichier .gitignore

Structure de base

Analysons tout de même la structure complète de l'application:

Le dossier /bin/ contient les programmes en CLI (ligne de commande) principalement utiles lors du développement ou du déploiement. On y trouve notamment la Console, un outil indispensable.

Le dossier /config/ contient toute la configuration de l'application, sa structure sera détaillée plus tard.

Le dossier /public/ correspond au point d'entrée web. Le serveur web démarré plutôt pointe sur ce dossier, ce qui signifie que seul son contenu est accessible via le web. L'application s'exécute donc dans un unique fichier public/index.php que l'on appelle Front Controller.

Le dossier /src/ contient toutes vos classes PHP. Il contient actuellement le Kernel (le "noyau" de votre application) et un dossier vide pour les controlleurs.

Le dossier /var/ contient principalement des "fichiers temporaires": fichiers de logs, cache, ...

Le fichier .env liste des variables d'environnement utilisées dans l'application.

Le fichier symfony.lock liste les recipes Symfony Flex installées avec leur version. En gardant une trace des recipes installées il est possible de les mettre à jour lors de mises à jour des packages associés. Listez les recipes avec composer recipes.