Description.
Le framework Symfony permet nativement les fonctionnalités minimum dans un souci de performances, à l'instar d'un micro-framework.
Par exemple son compilateur permet d'utiliser plusieurs patrons de conception (design patterns) via des mots réservés dans services.yaml :
Toutefois, on peut lui ajouter des composants, dont il convient de connaitre les fonctionnalités pour ne pas réinventer la roue. Pour les installer :
composer require symfony/nom_du_composant
Les quatre premiers ci-dessous sont inclus par défaut dans le microframework codice_1.
framework-bundle.
Structure la configuration principale du framework sans laquelle aucun composant n'est installable.
console.
Patrons de conception "Commande".
Fournit la possibilité d'exécuter le framework avec des commandes shell. Par exemple pour obtenir la liste de toutes les commandes disponibles dans un projet :
php bin/console help list
dotenv.
Gère les variables d'environnement non versionnées, contenues dans un fichier .env. Elles peuvent aussi bénéficier de en préfixant les types avec ":". Ex de .env :
IS_DEV_SERVER=1
Le "services.yaml, parameters:" récupère ensuite cette valeur et vérifie qu'il s'agit d'un booléen (via le processeur de variable d'environnement "bool") :
is_dev_server: '%env(bool:IS_DEV_SERVER)%'
Il existe plusieurs processeurs de variable d'environnement (en plus de "bool" et des autres types) :
Pour définir une valeur par défaut en cas de variable d'environnement manquante (sans utiliser codice_3), dans "services.yaml, parameters:" :
env(MY_MISSING_CONSTANT): '0'
yaml.
Ajoute la conversion de fichier en tableau PHP. Ce format de données constitue une alternative plus lisible au XML pour renseigner la configuration des services. Par défaut le framework se configure avec config.yaml.
routing.
patron de conception "Façade".
Installe les annotations permettant de router des URLs vers les classes des contrôleurs MVC.
serializer.
Permet de convertir des objets en tableaux ou dans les principaux formats de notation : JSON, XML, YAML et CSV.
 composer require symfony/serializer
Ce composant est notamment utilisé pour créer des APIs.
form.
Construit des formulaires HTML.
validator.
Fournit des règles de validation pour les données telles que les adresses emails ou les codes postaux. Utile à coupler avec les formulaires pour contrôler les saisies.
Ces règles peuvent porter sur les propriétés ou les getters.
Il permet aussi de créer des groupes de validateurs, et de les ordonner par séquences. Par défaut chaque classe a automatiquement deux groupes de validateurs : "default" et celui de son nom. Si une séquence est définie, le groupe "default" n'est plus égal au groupe de la classe (celui par défaut) mais à la séquence par défaut.
translation.
Module de traductions dans des fichiers contenant le -1 de chaque langue du projet. Par défaut le français est dans codice_12. On peut ensuite récupérer ces dictionnaires en Twig, ou en PHP via le service "translator".
Pour avoir les traductions inutilisées en anglais :
 bin/console debug:translation en --only-unused
Pour les traductions manquantes en anglais :
 bin/console debug:translation en --only-missing
event-dispatcher.
Patrons de conception "Observateur" et "Médiateur".
Assure la possibilité d'écouter des évènements pour qu'ils déclenchent des actions.
process.
Permet de lancer des sous-processus en parallèle. Exemple qui lance une commande shell :
 $process = new Process(['ls']);
 $process->run();
Exemple de requête SQL asynchrone :
 $sql = 'SELECT * FROM ma_table LIMIT 1';
 $process = Process::fromShellCommandline(sprintf('../bin/console doctrine:query:sql "%s"', $sql));
 $process->setTimeout(3600);
 $process->start();
cache.
Gère les connexions, lectures et écritures vers des serveurs de mémoire caches tels que ou .
Il fournit une classe "cacheItem" conforme à la PSR, instanciable par plusieurs adaptateurs.
asset.
Ajoute la fonction Twig codice_13 pour accéder aux fichiers CSS, JS ou images selon leurs versions.
webpack-encore.
Intégration de pour gérer la partie (ex : minifications des CSS et JS).
Installation.
NB : si n'est pas installé, le faire avec : codice_14.
Cela crée les fichiers package.json et yarn.lock contenant les dépendances JavaScript, le dossier assets/ contenant les JS et CSS versionnés, et le fichier webpack.config.js dans lequel ils sont appelés.
De plus, des fonctions Twig permettent d'y accéder depuis les templates : codice_15 et codice_16.
Par ailleurs, cela installe le framework JS Stimulus, et interprète les pour appeler ses contrôleurs ou méthodes.
Rebuild.
Pour que le code se build en cours de frappe, deux solutions :
La différence entre les deux est que le dev-server peut mettre à jour la page sans même la rafraichir.
messenger.
Patrons de conception "Chaîne de responsabilité".
Messenger permet d'utiliser des queues au protocole . En résumé, il gère l'envoi de messages dans des bus, ces messages transitent par d'éventuels "middlewares" puis arrivent à destination dans des "handlers". On peut aussi persister ces messages en les envoyant dans des "transports" via un , par exemple dans RabbitMQ, Redis ou Doctrine (donc une table des SGBD les plus populaires).
 php bin/console debug:messenger
Chaque middleware doit passer le relais au suivant ainsi :
return $stack->next()->handle($envelope, $stack);
Pour stopper le message dans un middleware sans qu'il arrive aux handlers :
return $envelope;
workflow.
Patrons de conception "État".
Ce composant nécessite de créer (en YAML, XML ou PHP) la configuration d'un , c'est-à-dire la liste de ses transitions et états (appelés "places").
Ces graphes sont ensuite visualisables en image ainsi :
use Symfony\Component\Workflow\Definition;
use Symfony\Component\Workflow\Dumper\StateMachineGraphvizDumper;
class WorkflowDisplayer
$definition = new Definition($places, $transitions);
echo (new StateMachineGraphvizDumper())->dump($definition);
sudo apt install graphviz
php WorkflowDisplayer.php | dot -Tpng -o workflow.png
browser-kit.
Simule un navigateur pour les tests d'intégration.
config.
Permet de manipuler des fichiers de configurations.
contracts.
Pour la .
css-selector.
Pour utiliser .
debug.
Fournit des méthodes statiques pour déboguer le PHP.
dependency-injection.
Normalise l'utilisation du "container" de services.
Permet aussi d'exécuter du code pendant la compilation via un "compiler pass", en implémentant l'interface "CompilerPassInterface" avec sa méthode "process".
dom-crawler.
Fournit des méthodes pour parcourir le .
expression-language.
Patrons de conception "Interpréteur".
"Expression language "sert à évaluer des expressions, ce qui peut permettre de définir des règles métier.
Installation :
 composer require symfony/expression-language
Exemple :
$el = new ExpressionLanguage();
$operation = '1 + 2';
echo(
 sprintf(
 "L'opération %s vaut %s",
 $el->compile($operation));
 $el->evaluate($operation));
);
// Affiche : L'opération 1 + 2 vaut 3
filesystem.
Méthodes de lecture et écriture dans les dossiers et fichiers.
finder.
Recherche dans les dossiers et fichiers.
security.
Ensemble de sous-composants assurant la sécurité d'un site. Ex : authentification, anti- ou droit des utilisateurs d'accéder à une page.
Dans security.yaml, on peut par exemple définir les classes qui vont assurer l'authentification ("guard"), ou celle "User" qui sera instanciée après.
Pour obtenir l'utilisateur ou son token, on peut injecter :
 TokenStorageInterface $tokenStorage
pour avoir l'utilisateur courant avec codice_17.
guard.
Extension de sécurité pour des authentifications complexes.
http-client.
Pour lancer des requêtes HTTP depuis l'application.
http-foundation.
Fournit des classes pour manipuler les requêtes HTTP, comme "Request" et "Response" que l'on retrouve dans les contrôleurs.
Par exemple :
use Symfony\Component\HttpFoundation\Response;
echo Response::HTTP_OK; // 200
echo Response::HTTP_NOT_FOUND; // 404
http-kernel.
Permet d'utiliser des évènements lors des transformations des requêtes HTTP en réponses.
inflector.
Deprecated depuis Symfony 5.
Accorde les mots anglais au pluriel à partir de leurs singuliers.
intl.
Internationalisation, comme par exemple la classe "Locale" pour gérer une langue.
ldap.
Connexion aux serveur .
lock.
Pour verrouiller les accès aux ressources.
Par exemple, pour ne pas qu'une commande soit lancée deux fois simultanément, bien que le composant console aie aussi cette fonctionnalité :
mailer.
Pour envoyer des emails.
mime.
Manipulation des messages .
notifier.
Pour envoyer des notifications telles que des emails, des SMS, des messages instantanés, etc.
options-resolver.
Gère les remplacements de propriétés par d'autres, avec certaines par défaut.
phpunit-bridge.
Patron de conception "Pont" qui apporte plusieurs fonctionnalités liées aux tests unitaires, telles que la liste des tests désuets ou des mocks de fonctions PHP natif.
property-access.
Pour lire les attributs de classe à partir de leurs getters, ou des tableaux.
property-info.
Pour lire les métadonnées des attributs de classe.
stopwatch.
Chronomètre pour mesurer des temps d'exécution.
string.
API convertissant certains objets en chaine de caractères. Ex :
use Symfony\Component\String\Slugger\AsciiSlugger;
$slugger = new AsciiSlugger();
echo $slugger->slug('caractères spéciaux € $');
Résultat :
 caracteres-speciaux-EUR
templating.
Extension de construction de templates.
var-dumper.
Ajoute une fonction globale codice_18 pour déboguer des objets en les affichant avec une coloration syntaxique et des menus déroulant.
Ajoute aussi codice_19 pour "dump() and die()".
var-exporter.
Permet d'instancier une classe sans utiliser son constructeur.
polyfill*.
On trouve aussi une vingtaine de composants , fournissant des fonctions PHP retirées dans les versions les plus récentes.
Composants désuets.
locale (<= v2.3).
Arrêté en 2011, car remplacé par le composant "intl".
icu (<= v2.6).
Arrêté en 2014, car remplacé par le composant "intl".
class-loader (<= v3.3).
Arrêté en 2011, car remplacé par composer.json.
Ajoutés en 2020.
Uid "(sic)" (>= v5.1).
Pour générer des .
RateLimiter (>= v5.2).
Patron de conception "Proxy", qui permet de limiter la consommation de ressources du serveur par les clients
Semaphore (>= v5.2).
Pour donner l'exclusivité d'accès à une ressource.
Ajoutés en 2021.
PasswordHasher (>= v5.3).
Pour gérer les chiffrements.
Runtime (>= v5.3).
Pour le démarrage (bootstrap) : permettre de découpler l'application de son code de retour.
Ajoutés en 2022.
Symfony UX (>= v5.4).
ux-chartjs.
Utilise Chart.js via Stimulus pour afficher des graphiques, via la fonction Twig codice_20.
ux-react.
Ajoute le framework .
ux-vue.
Ajoute le framework .
Composants non listés comme tels.
apache-pack.
Pour faire tourner le site sans passer par le serveur codice_21.