Programmation PHP/Symfony/Composant

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche


Description[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

Structure la configuration principale du framework sans laquelle aucun composant n'est installable[2].

console[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

Installe les annotations permettant de router des URLs vers les classes des contrôleurs MVC.

serializer[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

Construit des formulaires HTML.


Pour plus de détails voir : Programmation PHP/Symfony/Formulaire.

validator[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

Permet de lancer des sous-processus en parallèle[7]. Exemple qui lance une commande shell :

$process = new Process(['ls']);
$process->run();

Logo En l'absence de $process->stop() ou de timeout, le sous-processus peut être stoppé en redémarrant le serveur PHP.


cache[modifier | modifier le wikicode]

Gère les connexions, lectures et écritures vers des serveurs de mémoire caches tels que Redis ou Memcached.

asset[modifier | modifier le wikicode]

Fonction Twig pour accéder aux fichiers CSS, JS ou images.

webpack-encore[modifier | modifier le wikicode]

Intégration de Webpack pour gérer la partie front end (ex : minifications des CSS et JS).

messenger[modifier | modifier le wikicode]

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[8]. On peut aussi persister ces messages en les envoyant dans des transports via un DSN, par exemple Dans RabbitMQ, Redis ou Doctrine.

 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[modifier | modifier le wikicode]

Ce composant nécessite de créer (en YAML, XML ou PHP) la configuration d'un automate fini[9], 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[modifier | modifier le wikicode]

Simule un navigateur pour les tests d'intégration.

config[modifier | modifier le wikicode]

Permet de manipuler des fichiers de configurations.

contracts[modifier | modifier le wikicode]

Pour la programmation par contrat.

css-selector[modifier | modifier le wikicode]

Pour utiliser XPath.

debug[modifier | modifier le wikicode]

Fournit des méthodes statiques pour déboguer le PHP.

dependency-injection[modifier | modifier le wikicode]

Normalise l'utilisation du container de services.

dom-crawler[modifier | modifier le wikicode]

Fournit des méthodes pour parcourir le DOM.

expression-language[modifier | modifier le wikicode]

Pour évaluer des expressions.

filesystem[modifier | modifier le wikicode]

Méthodes de lecture et écriture dans les dossiers et fichiers.

finder[modifier | modifier le wikicode]

Recherche dans les dossiers et fichiers.

security[modifier | modifier le wikicode]

Ensemble de sous-composants assurant la sécurité d'un site. Ex : authentification, anti-CSRF ou droit des utilisateurs d'accéder à une page.

guard[modifier | modifier le wikicode]

Extension de sécurité pour des authentifications complexes.

http-client[modifier | modifier le wikicode]

Pour lancer des requêtes HTTP.

http-foundation[modifier | modifier le wikicode]

Fournit des classes pour pour manipuler les requêtes HTTP, comme Request et Response que l'on retrouve dans les contrôleurs.

http-kernel[modifier | modifier le wikicode]

Permet d'utiliser des évènements lors des transformations des requêtes HTTP en réponses.

inflector[modifier | modifier le wikicode]

Accorde les mots anglais au pluriel à partir de leurs singuliers.

intl[modifier | modifier le wikicode]

Internationalisation, comme par exemple la classe "Locale" pour gérer une langue.

ldap[modifier | modifier le wikicode]

Connexion aux serveur LDAP.

lock[modifier | modifier le wikicode]

Pour verrouiller les accès aux ressources.

mailer[modifier | modifier le wikicode]

Pour envoyer des emails.

mime[modifier | modifier le wikicode]

Manipulation des messages MIME.

notifier[modifier | modifier le wikicode]

Pour envoyer des notifications telles que des emails, des SMS, des messages instantanés, etc.

options-resolver[modifier | modifier le wikicode]

Gère les remplacements de propriétés par d'autres, avec certaines par défaut.

phpunit-bridge[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

Pour lire les attributs de classe à partir de leurs getters, ou des tableaux.

property-info[modifier | modifier le wikicode]

Pour lire les métadonnées des attributs de classe.

stopwatch[modifier | modifier le wikicode]

Chronomètre pour mesurer des temps d'exécution.

string[modifier | modifier le wikicode]

API convertissant certains objets en chaine de caractères.

templating[modifier | modifier le wikicode]

Extension de construction de templates.

var-dumper[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

Permet d'instancier une classe sans utiliser son constructeur.

polyfill*[modifier | modifier le wikicode]

On trouve aussi une vingtaine de composants polyfill, fournissant des fonctions PHP retirées dans les versions les plus récentes.

Composants désuets[modifier | modifier le wikicode]

icu[modifier | modifier le wikicode]

Fermé en 2014.

locale[modifier | modifier le wikicode]

Arrêté dans Symfony 2.2.

class-loader[modifier | modifier le wikicode]

Retiré depuis Symfony 4.0.

Composants non listés comme tels[modifier | modifier le wikicode]

apache-pack[modifier | modifier le wikicode]

Pour faire tourner le site sans passer par le serveur symfony server:start.

Références[modifier | modifier le wikicode]