Composer est un outil écrit en PHP qui permet de gérer les dépendances d’un projet. Ce qu’il faut comprendre par dépendance, c’est toute librairie ou bibliothèque PHP qu’un projet en dépend.

Introduction à Composer

Pour mieux comprendre une dépendance, je l’illustre pour le cas de HTML et CSS que j’en suis sûr tous ceux qui me lisent maitrisent mieux.

Vous voulez par exemple utiliser bootstrap pour designer votre site web, vous auriez besoin de bootstrap dans votre projet, donc, bootstrap est une dépendance car votre projet en dépende. Donc, sans bootstrap vu que votre document HTML a été interfacé avec l’utilisation de ses classes, votre projet ne peut pas mieux fonctionner à son absence.

Alors avec bootstrap, le plus simple serait de télécharger la librairie, et de l’inclure avec la balise link; devinez maintenant un outil qui permettrait de télécharger et inclure bootstrap dans votre projet de manière automatique dont la seule chose que vous auriez à faire c’est de le déclarer dans un fichier de configuration ? Et puis ça ne se limite pas qu’à une seule dépendance, Vous pourriez avoir besoin de plusieurs dépendances qui eux même dépendent d’autres dépendances.

C’est exactement ce que composer résout dans l’eco-système de PHP, Composer est exactement cet outil. Il permet de gérer toutes les dépendances d’un projet mais si composer restait juste avec les fonctionnalités que je viens d’illustrer dans cet exemple, il n’aurait que peu d’intérêt. Il va plus loin en gérant les versions de dépendances, les mises à jour de ses dépendances et bien plus encore.

Alors, si Bootstrap est une dépendance dans le cas de l’exemple donné, qu’est ce qui peut être une dépendance dans le cas de PHP ? Les dépendances, en sont pleines, elles ont un simple objectif dans tous les cas ou contextes : Eviter de réinventer la roue et d’être plus rapide sur ses projets en utilisant des blocs de code déjà conçus. Devinez que vous ayez besoin de savoir quel navigateur utilise un utilisateur dans votre projet. Au lieu de chercher à écrire le code qui répondra à ce que vous souhaitez, vous pouvez plutôt utiliser Browser.php qui fait très bien déjà cela. au final Browser.php sera une dépendance de votre projet. Découvrons dans la suite comment Composer gère les dépendances d’un projet PHP.

Installer et configurer Composer

Quoi de mieux à faire avant d’utiliser un outil comme composer que de savoir comment l’installer ? Alors, Deux manières existent pour installer et utiliser composer, soit vous l’installez directement dans votre projet en téléchargeant son archive (composer.phar) ou l’installez sous Windows globalement où vous auriez à l’utiliser dans tous vos projets.

Exécuter composer

Si vous l’aviez installé globalement sous Windows, en ouvrant l’invite de commande vous avez la commande composer

Si vous l’aviez bien évidement ajouté via l’archive composer.phar, depuis le dossier de votre projet, vous auriez à faire php composer.phar (Rassurez-vous que php a été ajouté dans la variable d’environnement de votre système)

Pour s’assurer que tout est bon, cette commande devrait vous afficher la version de composer

composer -v

//ou 

php composer.phar -v

 

Utilisation de composer

Créez un fichier nommé composer.json dans la racine de votre projet et à partir de ce fichier, vous allez spécifier les différentes dépendances de votre projet de la manière au format JSON de la manière suivante :

{
 "require": {
     nom_dependance1: version,
     nom_dependance2: version,
     //....
  }
}

Où nom_dependance* est le nom de la dépendance qui est constitué du nom de l’auteur et le nom du package (plus d’information ici). Tous les packages sont hébergés dans http://packagist.org

Si mon projet dépend de Browser.php, mon fichier composer.json sera comme suit :

{
   "cbschuld/browser.php": "dev-master"
}

Vous pouvez profiter pour spécifier les informations en rapport avec le projet.

{
   "name": 'Nom de mon projet',
   "description": "Description du projet",
   "version": "0.1.0",
   "authors" [
      {
         "name": "Developpeurs 1",
         "email": "[email protected]",
         "homepage": "https://informagenie.com",
         "role": "Developer"
      },
      {
         "name": "Developpeurs 2",
         "email": "[email protected]",
         "homepage": "http://example.com",
         "role": "Web designer"
      },
   ],
   "require": {
         "cbschuld/browser.php": "dev-master"
   }
}

Pour l’exemple, on va utiliser la librairie CustomAi que j’ai parlé sur la customisation de l’auto incrément. Vu qu’il est hébergé dans github et non dans packagist.org, on va devoir le spécifier dans le fichier composer.json

{
    "repositories": [
        {
            "type": "vcs",
            "url" : "https://github.com/informagenie/CustomAI"
        }
    ],
    "require": {
		"informagenie/CustomAI": "dev-master"
	}
}

J’ai défini dev-master comme contrainte de version vu que le projet CustomAI n’a qu’une seule branche, la branche master.  Après avoir défini ces informations, vous n’avez qu’à exécuter la commande :

composer install

//Ou pour l'installation locale

php compose.phar install

Cette commande dit à composer d’installer toutes les dépendances définies dans le fichier composer.json et composer téléchargera toutes les dépendances et leurs dépendances de manière récursive et un dossier vendor sera créé s’il n’existe pas où toutes les dépendances seront téléchargées.

En gros, cette commande réalise ces tâches

  1. Télécharges les dépendances et les dépendances de ces dépendances dans leurs liens respectifs
  2. Crée un dossier à partir vendor/ où il stocke les dépendances
  3. Génère un autoloader qui permettra l’inclusion automatique des fichiers
  4. Crée un fichier composer.lock où il enregistre l’état de votre projet actuel. cela lui permet de savoir quand faire la MAJ pour quelle dépendance.

Au final, mes dépendances sont chargées, pour utiliser ma librairie, je n’ai qu’à inclure l’autoloader dans le fichier où je veux l’utiliser.

//requisition de l'autoload

require_once __DIR__.'/vendor/autoload.php';

Et après, je n’ai qu’à utiliser simplement ma bibliothèque

 
 require_once __DIR__.'/vendor/autoload.php';

 use Informagenie\CustomAI;
 $db = new PDO('mysql:host=localhost;dbname=root', 'root', '');
 $cuai = CustomAI::create(['dsn'=>$db, 'table'=>'Users', 'column'=>'id', 'mask'=>"ETUDIANT_(00000)"]);
 echo $cuai; // affiche ETUDIANT_00001
 /*
   Le prochain enregistrement sera ETUDIANT_00002, ETUDIANT_00003, ETUDIANT_00004...ETUDIANT_99999 and ETUDIANT_100000
 */

Initialiser un projet avec composer

Généralement, on fork un projet, mais il se pourrait que vous ayez envie de commencer un nouveau projet en scratch, composer a une commande qui permet d’initialiser un projet en interactivité et au final il générera le fichier composer.json. vous n’avez qu’à faire

composer init

Où vous aurez à remplir les informations concernant votre projet et définir une par une les dépendances de ses dépendances en ligne de commande. (plus d’infos)

Retrouvez toutes les commandes possible de composer ou carrément lisez sa docs pour plus d’informations

Enfin, Vous auriez compris que composer est largement utilisé au sein de la communauté PHP, le connaitre est à ce jour vraiment indispensable pour un développeur PHP professionnel. Tout le framework populaires PHP comme Symfony ou Laravel utilise de facto composer dans leur éco-système, Cela permet d’éviter de réinventer la roue.

Catégorisé: