Symfony Flex : comprendre les recipes et le routage
Si vous avez deja installe un bundle Symfony et constate que tout etait configure automatiquement - fichiers YAML, variables d'environnement, enregistrement dans bundles.php - vous avez vu Symfony Flex en action. Mais comprenez-vous vraiment ce qui se passe sous le capot ? Ce guide detaille le fonctionnement de Flex, le systeme de recipes, et comment il transforme radicalement l'experience developpeur sur Symfony 7.2.
Symfony Flex : bien plus qu'un plugin Composer
Symfony Flex est un plugin Composer qui intercepte les operations require, update et remove pour appliquer des recipes (recettes) automatiquement. Avant Flex (Symfony 2/3), ajouter un bundle impliquait d'editer manuellement le kernel, creer des fichiers de configuration et definir les variables d'environnement. Flex a elimine cette friction.
Concretement, quand vous executez composer require mailer, Flex resout l'alias mailer vers symfony/mailer, telecharge le package, puis applique la recipe associee. Cette recipe est un fichier manifest.json qui decrit exactement quoi configurer.
Les aliases : des raccourcis intelligents
Flex introduit un systeme d'aliases qui simplifie les commandes Composer. Au lieu de taper le nom complet du package, vous utilisez un mot-cle court :
# Aliases courants
composer require orm # symfony/orm-pack
composer require mailer # symfony/mailer
composer require debug # symfony/debug-bundle
composer require profiler # symfony/web-profiler-bundle
composer require security # symfony/security-bundle
composer require twig # symfony/twig-bundle
composer require validator # symfony/validator
composer require messenger # symfony/messenger
Les aliases sont resolus via le serveur Flex (flex.symfony.com). Ce serveur maintient un registre de tous les aliases disponibles. Vous pouvez les consulter sur le depot officiel des recipes.
Anatomie d'une recipe : manifest.json
Chaque recipe est definie par un fichier manifest.json qui contient plusieurs sections. Prenons l'exemple de la recipe pour symfony/mailer :
{
"bundles": {
"Symfony\Bundle\FrameworkBundle\FrameworkBundle": ["all"]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"MAILER_DSN": "smtp://localhost"
},
"aliases": ["mailer", "mail"]
}
Voici ce que chaque section controle :
- bundles : ajoute automatiquement le bundle dans
config/bundles.phppour les environnements specifies (all,dev,test,prod) - copy-from-recipe : copie des fichiers de configuration (YAML, PHP) dans votre projet
- env : ajoute des variables d'environnement dans votre fichier
.env - aliases : definit les raccourcis Composer utilisables
Le fichier bundles.php : auto-registration
Avant Flex, vous deviez enregistrer chaque bundle dans le Kernel manuellement. Desormais, config/bundles.php est gere automatiquement :
// config/bundles.php
return [
SymfonyBundleFrameworkBundleFrameworkBundle::class => ['all' => true],
SymfonyBundleTwigBundleTwigBundle::class => ['all' => true],
SymfonyBundleSecurityBundleSecurityBundle::class => ['all' => true],
SymfonyBundleMonologBundleMonologBundle::class => ['all' => true],
SymfonyBundleDebugBundleDebugBundle::class => ['dev' => true, 'test' => true],
SymfonyBundleWebProfilerBundleWebProfilerBundle::class => ['dev' => true, 'test' => true],
DoctrineBundleDoctrineBundleDoctrineBundle::class => ['all' => true],
DoctrineBundleMigrationsBundleDoctrineMigrationsBundle::class => ['all' => true],
];
Quand vous installez un nouveau bundle, Flex ajoute la ligne correspondante. Quand vous le supprimez, il la retire. C'est propre et deterministe.
Recipes officielles vs contrib
Symfony maintient deux depots de recipes :
Depot officiel (symfony/recipes)
Ce depot contient les recipes pour les packages Symfony officiels et quelques packages tiers valides par l'equipe core. L'installation est automatique et transparente.
Depot contrib (symfony/recipes-contrib)
Ce depot accueille les recipes de la communaute. Lors de la premiere installation d'une recipe contrib, Flex affiche un avertissement :
$ composer require some-vendor/some-bundle
- WARNING some-vendor/some-bundle (v1.0): From github.com/symfony/recipes-contrib:main
The recipe for this package comes from the "contrib" repository,
which is open to community contributions.
Review the recipe at https://github.com/symfony/recipes-contrib/tree/main/some-vendor/some-bundle/1.0
Do you want to execute this recipe?
[y] Yes
[n] No
[a] Yes for all packages
[p] Yes permanently, never ask again for this project
(defaults to n):
Cette validation manuelle est une mesure de securite importante. Avant d'accepter, verifiez toujours le contenu de la recipe sur GitHub pour vous assurer qu'elle ne modifie pas votre projet de maniere indesirable.
Variables d'environnement : configuration automatique
Flex ajoute automatiquement les variables d'environnement dans votre fichier .env. Par exemple, installer symfony/mailer ajoute :
# .env
###> symfony/mailer ###
MAILER_DSN=smtp://localhost
###< symfony/mailer ###
Les commentaires ###> et ###< sont des marqueurs utilises par Flex pour identifier les sections ajoutees par chaque recipe. Lors de la desinstallation, Flex supprime exactement la section delimitee par ces marqueurs.
Desinstallation et nettoyage
L'un des points forts de Flex est la desinstallation propre. Quand vous executez composer remove, la recipe est appliquee en sens inverse :
# Desinstaller un package
composer remove symfony/mailer
# Ce qui se passe automatiquement :
# 1. Le bundle est retire de config/bundles.php
# 2. Les fichiers de configuration copies sont supprimes
# 3. Les variables .env entre les marqueurs sont supprimees
# 4. Le package est retire de composer.json et composer.lock
Attention cependant : si vous avez modifie les fichiers de configuration generes par la recipe, Flex vous demandera confirmation avant de les supprimer. Vos modifications ne sont jamais perdues sans avertissement.
Configurer Flex pour votre projet
Flex se configure dans composer.json via la section extra :
{
"extra": {
"symfony": {
"allow-contrib": true,
"require": "7.2.*",
"docker": false
}
}
}
- allow-contrib : accepte automatiquement les recipes contrib (pratique en CI/CD)
- require : contraint la version Symfony utilisee
- docker : active ou desactive la generation des fichiers Docker
Flex et le routage : le lien concret
Flex gere aussi la configuration du routage. Quand vous installez un bundle qui expose des routes (comme web-profiler-bundle), la recipe cree automatiquement un fichier de routage :
# config/routes/web_profiler.yaml (genere par Flex)
when@dev:
web_profiler_wdt:
resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
prefix: /_wdt
web_profiler_profiler:
resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
prefix: /_profiler
Ce mecanisme garantit que les routes sont correctement enregistrees dans l'environnement adequat (dev uniquement pour le profiler). A la desinstallation, ce fichier est supprime automatiquement.
Creer sa propre recipe
Si vous maintenez un bundle interne, vous pouvez creer une recipe privee. Il suffit de configurer un serveur de recipes personnalise :
{
"extra": {
"symfony": {
"endpoint": [
"https://api.github.com/repos/votre-org/recipes/contents/index.json",
"flex://defaults"
]
}
}
}
Le manifest.json suit exactement la meme structure que les recipes officielles. C'est particulierement utile dans un contexte d'entreprise ou vous avez des bundles partages entre plusieurs projets.
Bonnes pratiques avec Flex
Apres plusieurs annees d'utilisation de Flex en production, voici les recommandations que j'applique sur mes projets :
- Ne modifiez pas bundles.php manuellement : laissez Flex le gerer. Si vous devez desactiver un bundle temporairement, commentez la ligne mais ne la supprimez pas
- Verifiez les recipes contrib : prenez le temps de lire le
manifest.jsonavant d'accepter, surtout pour les packages peu connus - Committez les fichiers generes : les fichiers de configuration generes par Flex doivent etre versionnes. Ils font partie de votre projet
- Utilisez
composer recipespour lister toutes les recipes installees et detecter celles qui ont ete mises a jour
# Lister les recipes installees
composer recipes
# Verifier si des mises a jour de recipes sont disponibles
composer recipes:update
# Reinstaller une recipe specifique
composer recipes:install symfony/mailer --force
Flex dans un workflow d'equipe
En equipe, Flex simplifie considerablement l'onboarding. Un nouveau developpeur clone le projet, execute composer install, et toute la configuration est en place. Pas de documentation de setup a suivre etape par etape.
Pour aller plus loin dans la mise en place de votre environnement, consultez notre guide d'installation Symfony 2026. Si vous souhaitez maitriser les commandes essentielles, notre cheatsheet CLI Symfony couvre toutes les commandes importantes. Et pour optimiser les performances de votre application, decouvrez notre article sur le cache Symfony avec PSR-6 et PSR-16.
Besoin d'un developpeur Symfony pour votre projet ? Consultez mes tarifs, decouvrez mes services, ou contactez-moi directement pour discuter de votre besoin.
