Description
Le framework Symfony possède des dizaines de composants[1], 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 symfony/skeleton
.
framework-bundle
Structure la configuration principale du framework sans laquelle aucun composant n'est installable[2].
console
Fournit la possibilité d'exécuter le framework avec des commandes shell[3]. 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[4]. Elles peuvent aussi bénéficier de type checking en préfixant les types avec ":". Ex de .env :
IS_DEV_SERVER=1
Le parameters.yml récupère ensuite cette valeur et vérifie qu'il s'agit d'un booléen :
is_dev_server: '%env(bool:IS_DEV_SERVER)%'
yaml
Ajoute la conversion de fichier YAML en tableau PHP[5]. 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
Installe les annotations permettant de router des URLs vers les classes des contrôleurs MVC.
- Pour plus de détails voir : Programmation_PHP/Symfony#Routing.
serializer
Permet de convertir des objets en tableaux ou dans les principaux formats de notation : JSON, XML, YAML et CSV[6].
composer require symfony/serializer
Ce composant est notamment utilisé pour créer des APIs.
form
Construit des formulaires HTML.
- Pour plus de détails voir : Programmation PHP/Symfony/Formulaire.
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.
translation
Module de traductions dans des fichiers contenant le ISO 639-1 de chaque langue du projet. Par défaut le français est dans translations/messages.fr.yml
. On peut ensuite récupérer ces dictionnaires en Twig, ou en PHP via le service "translator".
event-dispatcher
Assure la possibilité d'écouter des évènements pour qu'ils déclenchent des actions.
- Pour plus de détails voir : Programmation PHP/Symfony/Évènement.
process
Permet de lancer des sous-processus en parallèle[7]. Exemple qui lance une commande shell :
$process = new Process(['ls']);
$process->run();
![Logo](../../../I/OOjs_UI_icon_alert-warning.svg.png.webp)
$process->stop()
ou de timeout, le sous-processus peut être stoppé en redémarrant le serveur PHP.Exemple de requête SQL asynchrone[8] :
$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 Redis ou Memcached.
asset
Fonction Twig pour accéder aux fichiers CSS, JS ou images.
webpack-encore
Intégration de Webpack pour gérer la partie front end (ex : minifications des CSS et JS).
messenger
Messenger permet d'utiliser des queues au protocole AMQP. 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[9]. On peut aussi persister ces messages en les envoyant dans des transports via un DSN, 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
Ce composant nécessite de créer (en YAML, XML ou PHP) la configuration d'un automate fini[10], 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 programmation par contrat.
css-selector
Pour utiliser XPath.
debug
Fournit des méthodes statiques pour déboguer le PHP.
dependency-injection
Normalise l'utilisation du container de services.
dom-crawler
Fournit des méthodes pour parcourir le DOM.
expression-language
Expression language sert à évaluer des expressions, ce qui peut permettre de définir des règles métier[11].
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-CSRF 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.
guard
Extension de sécurité pour des authentifications complexes.
http-client
Pour lancer des requêtes HTTP depuis l'application.
- Pour plus de détails voir : Programmation PHP/Symfony/HttpClient.
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 LDAP.
lock
Pour verrouiller les accès aux ressources.
mailer
Pour envoyer des emails.
mime
Manipulation des messages MIME.
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
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.
runtime
Deprecated depuis Symfony 5.3. Permettre de découpler l'application de son code de retour.
string
API convertissant certains objets en chaine de caractères.
templating
Extension de construction de templates.
- Pour plus de détails voir : Programmation PHP/Symfony/Templating.
var-dumper
Ajoute une fonction globale dump()
pour déboguer des objets en les affichant avec une coloration syntaxique et des menus déroulant.
Ajoute aussi dd()
pour dump() and die().
var-exporter
Permet d'instancier une classe sans utiliser son constructeur.
polyfill*
On trouve aussi une vingtaine de composants polyfill, fournissant des fonctions PHP retirées dans les versions les plus récentes.
Composants désuets
icu
Fermé en 2014.
locale
Arrêté dans Symfony 2.2.
class-loader
Retiré depuis Symfony 4.0.
Composants non listés comme tels
apache-pack
Pour faire tourner le site sans passer par le serveur symfony server:start
.
Ajoutés en 2020
Uid
RateLimiter
Semaphore
Références
- ↑ https://symfony.com/components
- ↑ https://symfony.com/doc/current/reference/configuration/framework.html
- ↑ https://symfony.com/doc/current/components/console.html
- ↑ https://symfony.com/doc/current/components/dotenv.html
- ↑ https://symfony.com/doc/current/components/yaml.html
- ↑ https://symfony.com/doc/current/components/serializer.html
- ↑ https://symfony.com/doc/current/components/process.html
- ↑ https://gist.github.com/appaydin/42eaf953172fc7ea6a8b193694645324
- ↑ https://vria.eu/delve_into_the_heart_of_the_symfony_messenger/
- ↑ https://symfony.com/doc/current/workflow.html
- ↑ https://symfony.com/doc/current/components/expression_language.html