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
.