Composer
Notions théoriques
Composer est un outil de gestion des dépendances pour PHP, qui permet aux développeurs d'automatiser le processus d'installation et de mise à jour des bibliothèques qu'ils utilisent dans leurs projets.

Composer permet d'installer et de gérer les bibliothèques dont votre projet a besoin, tout en évitant les conflits entre différentes versions de ces bibliothèques.
La traduction en anglais de 'bibliothèque' est 'library'.
Ne pas confondre avec la traduction en anglais de 'librairie' qui est 'bookstore'.
Composer permet donc de gérer les dépendances de vos projets PHP.
Installer Composer
Installer composer sous Windows
Voici les étapes pour installer la dernière version de Composer sous Windows :
-
Téléchargez l'installateur Composer depuis le site officiel de Composer : https://getcomposer.org/download/.
-
Exécutez l'installateur que vous venez de télécharger. Cela lancera l'assistant d'installation de Composer.
-
Suivez les instructions de l'assistant d'installation. Vous pouvez généralement accepter les options par défaut, sauf si vous avez des besoins spécifiques.
-
Lorsque l'installation est terminée, ouvrez une nouvelle fenêtre de terminal (Invite de commandes ou PowerShell).
-
Pour vérifier que Composer est correctement installé, tapez la commande
composer -v.Vous devriez voir la version de Composer s'afficher, ce qui confirme que l'installation s'est déroulée avec succès.
Installer composer sous Linux
Voici les étapes pour installer la dernière version de Composer sous Linux Debian :
-
Ouvrez un terminal.
-
Mettez à jour les packages de votre système en exécutant la commande suivante :
sudo apt update -
Installez les dépendances nécessaires en exécutant la commande suivante :
sudo apt install php php-cli php-zip unzip -
Téléchargez Composer en utilisant cURL en exécutant la commande suivante :
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" -
Vérifiez l'intégrité du téléchargement en exécutant la commande suivante :
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0d') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" -
Installez Composer en exécutant la commande suivante :
php composer-setup.php --install-dir=/usr/local/bin --filename=composer -
Pour vérifier que Composer est correctement installé, tapez la commande
composer -v.Vous devriez voir la version de Composer s'afficher, ce qui confirme que l'installation s'est déroulée avec succès.
Le gestionnaire des bibliothèques PHP
Pour utiliser Composer, vous devez d'abord créer un fichier composer.json dans le répertoire racine de votre projet.
Le fichier composer.json contient une liste des dépendances de votre projet.
composer.json et composer.lock sont deux fichiers importants utilisés par Composer.
-
composer.json: C'est le fichier principal que vous modifiez manuellement pour déclarer les dépendances de votre projet. Il contient des informations sur le projet et spécifie les dépendances requises, y compris leur version minimale acceptable. Par exemple, vous pouvez spécifier que votre projet nécessite la version 1.* de certaines bibliothèques. -
composer.lock: Ce fichier est généré (ou mis à jour) automatiquement lorsque vous exécutezcomposer updateoucomposer installsans avoir de fichier lock existant. Il contient des informations sur chaque paquet installé, y compris la version exacte qui a été installée. Cela signifie que si vous partagez votre projet avec quelqu'un d'autre et qu'il exécutecomposer install, il recevra exactement les mêmes versions de chaque paquet, indépendamment de leurs versions actuelles.
La principale différence est donc que
composer.jsonest un document que vous modifiez pour déclarer ce dont votre projet a besoin, tandis quecomposer.lockest un document généré automatiquement qui enregistre exactement ce qui a été installé.
Cela permet une certaine flexibilité (vous pouvez accepter différentes versions d'un paquet selon les besoins de votre projet) tout en assurant la reproductibilité (tout le monde qui travaille sur le projet aura les mêmes versions des paquets, évitant ainsi les problèmes "ça marche sur ma machine").
Le répertoire central des bibliothèques PHP
Il existe un répertoire central de packages pour le langage de programmation PHP : https://packagist.org

Packagist.org fonctionne en tandem avec Composer.
Caractéristiques de Packagist.org :
-
Vaste Répertoire : Packagist.org offre un large éventail de packages PHP, couvrant une variété de fonctionnalités, allant des frameworks aux outils d'assistance au développement.
-
Intégration avec Composer : Les packages listés sur Packagist peuvent être facilement intégrés dans des projets PHP grâce à Composer, qui gère les versions et les dépendances de manière transparente.
-
Versioning Automatisé : Packagist travaille avec les systèmes de versioning comme Git, permettant aux développeurs de mettre à jour leurs packages automatiquement dès qu'une nouvelle version est publiée.
-
Recherche et Découverte : Le site propose des outils de recherche avancés pour aider les développeurs à trouver les packages dont ils ont besoin selon des critères spécifiques tels que la popularité, la maintenance ou la pertinence.
-
Facilité de Publication : Les développeurs peuvent soumettre leurs propres packages sur Packagist, les rendant ainsi accessibles à la communauté PHP mondiale.
Packagist.org a favorisé une culture de réutilisation et d'optimisation de codes PHP, permettant aux développeurs de se concentrer sur la création de fonctionnalités uniques plutôt que de réinventer la roue.
Les fichiers composer.json et composer.lock
Composer utilise 2 fichiers : composer.json et composer.lock.
-
Le fichier
composer.jsonest un fichier de configuration utilisé par Composer pour gérer les dépendances d'un projet PHP. Ce fichier définit les bibliothèques dont le projet a besoin et les versions appropriées, ainsi que d'autres paramètres liés à la gestion des packages.Exemple d'un fichier
composer.jsonVoici un exemple simple de ce à quoi pourrait ressembler un fichier
composer.json:{
"name": "exemple/mon-projet",
"description": "Une brève description du projet",
"type": "project",
"license": "MIT",
"require": {
"php": "^7.4 || ^8.0",
"monolog/monolog": "^2.0",
"guzzlehttp/guzzle": "^7.0.1"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"autoload": {
"psr-4": {
"MonNamespace\\": "src/"
}
},
"config": {
"optimize-autoloader": true,
"preferred-install": "dist",
"platform": {
"php": "7.4.3"
}
},
"scripts": {
"test": "phpunit --configuration phpunit.xml"
},
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
}
}Le fichier
composer.jsonest essentiel pour définir l'environnement de votre projet et garantir que tous les développeurs travaillant sur le projet utilisent les mêmes versions des bibliothèques. Quand vous exécutez des commandes commecomposer installoucomposer update, Composer lit ce fichier pour savoir quelles versions des bibliothèques doivent être installées ou mises à jour. -
Le fichier
composer.lockest généré par Composer et il contient des informations détaillées sur les versions exactes des packages installés, ainsi que les dépendances de ces packages pour un projet PHP donné. Ce fichier assure que le même environnement de dépendances est maintenu à travers différentes installations et environnements de développement.Exemple d'un fichier
composer.lockVoici un exemple simplifié de ce à quoi pourrait ressembler un fichier
composer.lockfichier :{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "b5656e4bce6a3d8113c832b0d4f04f45",
"packages": [
{
"name": "monolog/monolog",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "fe6f5ea6b0e3ad6ca6b49f7b7c2daa0d0b4e4b48"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/fe6f5ea6b0e3ad6ca6b49f7b7c2daa0d0b4e4b48",
"reference": "fe6f5ea6b0e3ad6ca6b49f7b7c2daa0d0b4e4b48",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0",
"psr/log": "^1.0.1"
},
"type": "library",
"autoload": {
"psr-4": {
"Monolog\\": "src/Monolog"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be"
}
],
"description": "Sends your logs to files, sockets, inboxes, databases and various Web services",
"homepage": "http://github.com/Seldaek/monolog",
"keywords": ["log", "logging", "psr-3"]
}
// ... more packages
],
"packages-dev": [
// ... dev packages
],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
"php": "7.4.3"
},
"platform-dev": [],
"plugin-api-version": "2.0.0"
}Cet exemple montre un seul package (
monolog/monolog) verrouillé à une version spécifique avec une référence précise au commit dans le dépôt Git correspondant.