16.Composer

16.1.Introduction

Composer est un outil de gestion de dépendances entre bibliothèques dédié à PHP (à l'image d'autres outils comme npm dans d'autres domaines). Il s'agit d'une simple commande qui permet de télécharger dans son espace de travail ou de production l'ensemble des fichiers nécessaires au fonctionnement d'une ou plusieurs bibliothèques de fonctions. Il permet de s'assurer que les versions téléchargées sont compatibles entre elles et avec l'environnement de travail. Il s'assure également de récupérer l'ensemble des dépendances. Composer se configure également simplement pour apporter de l'aide dans l'exécution de tâches quotidiennes (comme lancer un serveur web de test).

16.2.Installation

Le script d'installation de composer est téléchargeable en cliquant sur le lien: Télécharger composer. Il s'agit d'un script PHP baptisé par défaut installer.
Si vous lancez > php installer, sans autre argument, vous récupérez une archive PHP composer.phar dans ce cas,.pour lancer composer, il suffit de taper > php composer.phar.
Cependant pour des questions de commodité il est conseillé de remplacer cette commande par un exécutable baptisé composer et accessible dans votre PATH, pour n'avoir, le moment venu qu'à taper > composer. Pour l'installer ainsi, lancez plutôt > php installer --install-dir=/usr/local/bin --filename=composer.
rem
  • Adaptez le chemin (/usr/local/bin) pour pointer vers un dossier contenant (dans votre environnement) les fichiers exécutables (i.e. un dossier connu du PATH).

16.3.Utilisation

Par défaut, composer s'appuie sur un fichier composer.json pour savoir quoi installer. Il n'est cependant pas nécessaire de créer manuellement ce fichier lorsqu'il s'agit d'initier un projet. A la place, il suffit, lorsque l'on souhaite récupérer les fichiers d'un projet, de taper la commande > composer require <nom du projet> (ou > php composer.phar require <nom du projet> selon la méthode retenue pour l'installation de composer).
Par exemple, si le projet est zendframework/zendframework, un fichier composer.json similaire au suivant sera créé et les fichiers seront téléchargés.
{
    "require": {
        "zendframework/zendframework": "^2.4"
    }
}
Si vous avez déjà un fichier composer.json alors il suffit de taper > composer update pour récupérer les fichiers et les dépendances décrites dans le fichier.

16.4.Le fichier composer.json

composer.json est un fichier au format json. Il se présente globalement comme la sérialisation d'un objet: c'est à dire un gros bloc entre accolades contenant des attributs (qui correspondent à des sections portant des noms) suivis du caractère deux-point ':' puis une valeur, un tableau, un autre objet, etc.
La section probablement la plus importante du fichier est la section require qui indique quelles sont les bibliothèques nécessaires à votre projet.
Pour chacune de ces bibliothèques vous indiquez quelle version vous souhaitez utiliser. Pour cela vous avez la liberté de préciser une version précise (ex: 2.4.10), la dernière version disponible dans une branche donnée (ex: 2.* pour avoir la dernière version 2 disponible) ou encore la dernière version au moins égale à (ex: ^2.4 qui pourra aussi bien retourner une 2.4.10 ou une version 3.0 en fonction de ce qui est compatible avec votre environnement).
Voilà pour un survol ultra rapide du fichier.

16.5.L'arborescence composer

Une fois la commande lancée soit avec le paramètre update (cas d'un fichier composer.json pré-existant) soit avec le paramètre require (création à la volée d'un fichier composer.json), les fichiers répondant à la fois aux critères précisés (via composer.json) et à votre environnement (ex: version de PHP utilisée) les fichiers sont téléchargés dans un dossier vendor/ situé (par défaut) au même niveau que le fichier composer.json. Les fichiers sont regroupés dans des dossiers portant l'identifiant de la bibilothèque. Dossieurs eux même regroupés dans des dossiers portant les identifiants des auteurs des bibliothèques. Aux bibliothèques téléchargées vient s'ajouter un fichier autoload.php qui va s'avérer fort pratique lorsqu'il va s'agir de charger les classes offertes par ces bibliothèques.

16.6.Le fichier autoloader.php

S'il n'y avait pas ce fichier autoloader.php, il faudrait, à chaque fois que l'on souhaite utiliser une classe, repérer le nom du fichier dans lequel elle est déclarée et faire un "include" du fichier puis un appel à "use" au sein de notre classe et enfin, peut-être instancier un objet.
Grâce à la présence de simple ficher autoloader.php, quelque soit la classe que l'on souhaite utiliser (à partir du moment où elle fait partie des bibliothèques "packagées" pour composer). Il suffit de faire un "include" du fichier autoloader.php une "bonne fois pour toute" et juste des "use" pour les classes qui nous intéressent. Les inclusions se faisant automatiquement au moment opportun: typiquement au moment de l'instanciation s'il y a besoin.