Présentation et intérêts
Composer est un gestionnaire de dépendances en PHP. Il s’agit d’un projet libre, disponible sur GitHub, similaire à npm pour Node.js.
Comme tout gestionnaire de dépendances, Composer permet d’indiquer les bibliothèques dont a besoin une application web pour fonctionner et la version de chacune de ces bibliothèques. Composer se charge de récupérer les sources de celles-ci ainsi que leurs dépendances et inclut un autoloader pour charger les classes afin d’éviter de devoir faire des require a foison dans le projet.
L’autoloader de composer peut être utiliser pour charger les classes internes (maison) du projet. Cela évite de devoir en concevoir un.
Liens utiles
- Site officiel : https://getcomposer.org/
- Liste des dépendances / projets : https://packagist.org/
Installation
Avant de démarrer l’installation, assurez-vous d’voir PHP d’installé (version 7.2.5+). L’installation est ensuite documentée sur le site officiel de Composer et s’effectue très rapidement.
Système Linux / Unix / MacOS
Il est possible soit d’installer Composer de manière global sur la machine, soit par projet. S’il est installé globalement sur la machine, cela permet ensuite de l’exécuter depuis n’importe quel répertoire / projet avec la commande composer plutôt que php composer.par.
Après installation, vous devriez avoir un fichier composer.phar, qui est Composer, dans le répertoire ciblé, ou bien un fichier composer dans /usr/local/bin. Vous pouvez vérifier que Composer est fonctionnel en exécutant la commande suivante :
# Vérifier que Composer est installé en exécutant depuis votre projet : php composer.phar --help # Commande depuis n'importe où si installation faite globalement composer --help # Si l'aide s'affiche, c'est ok. # Vous pouvez aussi vérifier la version installée avec la commande : composer -V
Système Windows
Il faut se rendre sur le site officiel de Composer pour télécharger l’exécutable à installer. Celui-ci se chargera de modifier la variable PATH de Windows.
A la fin de l’installation, vous pouvez vérifier le bon fonctionnement en ouvrant l’invite de commande et en exécutant la commande suivante :
# Commande depuis n'importe où si installation faite globalement composer --help # Si l'aide s'affiche, c'est ok. # Vous pouvez aussi vérifier la version installée avec la commande : composer -V
Mise à jour de Composer
composer self-update
Utilisation
Préparer le fichier composer.json
Un fichier composer.json est nécessaire pour indiquer les dépendances de notre projet. Ce fichier est à positionner à la racine du projet.
Ajoutez le avec un contenu minimum, par exemple :
{
"name": "vendor_name/app_name",
"description": "App description",
"minimum-stability": "stable",
"license": "proprietary",
"authors": [
{
"name": "Fabien",
"email": "mail@mail.com"
}
],
"require": {
"guzzlehttp/guzzle": "^7.5",
"ext-pdo": "*"
}
}Exécutez ensuite la commande composer install et Composer initiera le projet et installera les dépendances indiquées. Le fichier composer.lock sera alors créé et le répertoire vendor également.
Installer et mettre à jour les dépendances
Lorsque vous aurez modifier le fichier composer.json pour y indiquer les dépendances, il faudra exécuter une ligne de commande pour que Composer télécharge les sources.
Attention, avant d’exécuter cette ligne de commande assurez-vous de bien être positionné dans le répertoire où se trouve le fichier composer.phar.
# Installer les nouvelles dépendances ajoutées au fichier composer.json php composer.phar install # Installer une nouvelle dépendance via la commande composer require aaaa/bbbb # Mettre à jour les dépendances php composer.phar update # Ou (MAJ dépendance d'un projet sous windows) : composer update
Attention toutefois concernant les mises à jour. Il est fortement déconseillé d’exécuté un update seul sans préciser la dépendance que l’on souhaite mettre à jour. En effet, sans cette précision c’est la totalité des dépendances du projet qui sont mises à jour. Cela peut casser des fonctionnalités, parfois indétectables surtout si le projet n’est pas couvert pas des tests automatisés.
Alimenter le fichier composer.json
| Symbole | Rôle (placé avant un numéro de version) | Exemple | |
|---|---|---|---|
| >= | Permet d’en étendre le numéro. De même on trouve les symboles >, <, ⇐. | “php”: “>=5.5.9” inclut PHP 7. | |
| != | Exclut une version. | ||
| – | Définit une plage de versions. | ||
| ¦¦ | Ajoute des versions possibles. | “symfony/symfony”: “2.8 ¦¦ 3.0” regroupe uniquement ces deux versions. | |
| * | Étend à toutes les sous-versions. | “symfony/symfony”: “3.1.*” comprend la 3.1.1. | |
| ~ | Étend aux versions suivantes du même niveau. | “doctrine/orm”: “~2.5” concerne aussi la 2.6 mais pas la 2.4 ni la 3.0. | |
| ^ | Fait la même chose que tilde sous réserve qu’il y ait une compatibilité ascendante. | “symfony/symfony”: “ | 3.1” concerne les version 3.X et 3.X.X mais pas les 4.X |
Documentation : https://getcomposer.org/doc/articles/versions.md
Indiquez votre version de PHP
Une bonne pratique est d’indiquer votre version de PHP dans le fichier composer.json. Cela permettra de lever des alertes bloquantes si vous essayer d’intégrer une dépendance nécessitant une version plus récente de PHP et qui risque donc de ne pas fonctionner sur votre environnement.
{
"config": {
"platform": {
"php": "7.2"
}
},
"name": "app_name",
"require": {
...
}
}Charger l’autoloader de Composer
Après avoir intégré des dépendances dans le fichier composer.json, vous devez inclure l’autoloader de Composer pour pouvoir utiliser les bibliothèques inclus. On part du principe que le fichier composer.json est situé à la racine du projet, idem pour le répertoire vendor.
// À indiquer au début de votre projet require __DIR__ . '/vendor/autoload.php'; // Vous pouvoir maintenant utiliser des classes des bibliothèques intégrées via Composer.
Utiliser l’autoloader de Composer pour vos propres classes PHP
Il faut modifier le fichier composer.json pour y indiquer un autoloading de type PSR-4 sur le namespace souhaité et le répertoire qui contient les classes du namespace.
Ci-après un exemple, partant du principe que le fichier composer.json et le répertoire vendor sont tous deux situés à la racine du projet, et que l’on a un répertoire lib également à la racine du projet qui contient nos classes PHP.
{
"name": "app_name",
"require": {
...
},
"autoload": {
"psr-4": {
"MyNamespace\\": "lib/"
}
}
}Pour que cela soit pris en compte, il faut exécuter la commande :
# Actualiser l'autoloader php composer.phar dump-autoload # ou bien (si composer dans le PATH de Windows) : composer dump-autoload