Composer est un outil de gestion de dépendance en PHP. Il vous permet de déclarer les librairies dont votre projet dépend, et il va vous les gérer (installation/mise à jour). C'est vraiment l’outil de gestion de dépendance en PHP.

Dans ce tutoriel, nous allons d'abord voir ce que c'est qu'un gestionnaire de dépendances, nous allons ensuite installer composer, et voir de façon générale comment fonctionne cet outil.

Un gestionnaire de dépendance, qu'est ce que c'est?

Un gestionnaire de dépendance est un outil qui vous permet de gérer les dépendances de votre projet. Les gestionnaires de dépendances sont un super concept. Imaginer donc que vous travaillez sur un projet qui dépend d'autres librairies, disons que votre site utilise swiftmailer qui va vous permettre d'envoyer des mails en PHP, la méthode hard c'est de le télécharger et le mettre quelque part dans votre projet, jusqu'ici tout va bien. Maintenant que faire si une nouvelle version de swiftmailer sort, vous faites alors la même chose, en écrasant l'ancienne version. Disons maintenant que swiftmailer à son tour dépend d'une autre librairie: email-validator qui va vous permettre de valider un email, qui à son tour peut dépendre d'une autre librairie. Il faut aussi télécharger cette librairie et faire la mise à jour en écrasant l'ancienne version, et vous allez en faire de même pour toutes les librairies que vous voulez utiliser.

Maintenant, disons que ça continue ainsi, et à un certain moment, il y a un problème avec email-validator par exemple, que faire alors, il faut revenir aux versions antérieures et faire des tests jusqu’à ce que ça marche.

Ou encore vous rejoignez un projet, est-ce qu'ils utilisent swiftmailer, si oui où est-ce qu'il est installé et quelle version ils utilisent.

Ceci est juste un aperçu de la gestion des dépendances sans utiliser un outil approprié. Et ici nous avons parlé que de deux dépendances, ceci n'est pas le cas dans de grand projet, où vous allez y trouver des dizaines de dépendances et qui à leur tour dépendent d'autres librairies.

Le gestionnaire des dépendances résout ces problèmes en automatisant tout cela. La récupération de dépendances telles que swiftmailer, email-validator, symfony, etc. peut être effectuée automatiquement. Vous pouvez également fixé des versions de préférences pour votre projet pour éviter les conflits.

Un gestionnaire de dépendances standardise la manière dont les packages sont stockés et d'où ils sont utilisés. En pratique, cela signifie que tout projet utilisant le même gestionnaire de dépendances suivra la même structure - au moins pour les dépendances. Bref, les gestionnaires de dépendances sont le bonheur.

Installer composer

Vous pouvez installer composer sur n'importe quel système d’exploitation. Pour les utilisateurs de Windows, vous pouvez suivre la procédure sur le site de composer. Pour les systèmes Linux et OSx rendez vous sur cette page. Entrer donc les 4 premières lignes qu'ils vous demandent de rentrer:

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"

Alors ne copier pas ce code, rendez-vous plutôt sur la page pour copier le code qui s'y trouve, parce que ce code peut changer tout le temps, mais vous trouverez la version authentique de ce code sur la page de composer.

Un fichier composer.phar doit être créé dans votre dossier actuel, dans ce cas composer est installé localement. Il est plus mieux de l'installer globalement et de pouvoir y accéder de n'importe où sur votre ordinateur. Pour cela, il faut déplacer le fichier composer.phar dans le /bin, et nous voulons aussi utiliser Composer en appelant la commande composer, c'est plus logique et joli que composer.phar. Sans quitter donc le dossier actuel, entrez la commande:

$ mv composer.phar /bin/composer

Vous devez maintenant avoir composer installer, pour le vérifier, entrer la commande suivante dans un terminal:

$ composer

Voici l'affichage chez moi:

Si vous avez un problème, essayez de revoir l'installation, ou posez votre question dans la section commentaire ci-dessous.

Il faut savoir que la version peut être différente de la votre, ce n'est donc pas un problème.

Utilisation de composer

Maintenant, nous allons découvrir comment utiliser composer. Mais avant, il faut savoir que composer comme on l'a dit est un gestionnaire de dépendance, il gère donc les dépendances de votre projet, et il fonctionne en pair avec Packagist qui est son répertoire de dépendances. Pour faire simple, voilà comment ça fonctionne, Packagist est le dépôt des librairies PHP, c'est ici que vous allez trouver les librairies que vous voulez utilisez, nous allons donc utiliser composer pour aller chercher ces librairies depuis Packagist.

Quand on utilise composer, le cœur de tout son fonctionnement est un fichier JSON appelé composer.json. C'est dans ce fichier nous allons mentionner nos dépendances et leur version. Quand on crée un tout nouveau projet, le fichier composer.json n'existe pas, il faut donc le créer.

Mais attend, pars pas créer un fichier en dur comme ça, on va utiliser composer pour créer ce fichier, on va en quelque sorte initialiser composer dans ce projet, pour cela, placez vous à la racine de votre projet et entrer la commande:

$ composer init

Avec cette commande, nous initialisons composer dans notre projet, et créons en même temps le fichier composer.json en renseignant des informations qui va nous être demander par composer:

  • Le nom du projet que vous pouvez laisser par défaut
  • La description du projet
  • L'auteur
  • Stabilité minimale, il va permettre de filtrer les librairies par rapport à la valeur qui vous lui attribuez. J'y ai mis stable, comme ça tout les packages que je vais utiliser doivent être à la version stable. Rendez-vous ici pour plus d'informations
  • Type du package: nous nous développons un projet, donc on écrit project
  • License: la licence va définir comment les autres personnes pourront utiliser votre projet
  • Les deux dernières questions répondez non.

Regardez cette image:

Si vous confirmez, un fichier composer.json va alors être créer dans le dossier dans lequel vous vous trouvez, dans votre projet. Vous pouvez l'ouvrir et voir, c'est le même contenu que vous venez de remplir.

{
    "name": "orion/composer",
    "description": "Un projet sur kaherecode",
    "type": "project",
    "authors": [
        {
            "name": "alioukahere",
            "email": "alioukahere@gmail.com"
        }
    ],
    "minimum-stability": "stable",
    "require": {}
}

C'est dans ce fichier que nous allons définir nos dépendances et leurs différentes versions, voyons tout de suite donc comment ajouter une dépendance à notre projet.

Ajouter une dépendance

Maintenant que nous avons composer dans notre projet, nous pouvons spécifier nos dépendances. Pour installer une dépendance, nous avons deux méthodes, en utilisant la commande composer require ou en mentionnant notre dépendance dans la section require du fichier composer.json

composer require

La première méthode consiste à laisser composer lui même écrire dans le fichier composer.json, disons que nous voulons installer swiftmailer par exemple, pour cela, on écrit:

$ composer require swiftmailer/swiftmailer

Bon, il suffit de parler un minimum anglais, pour comprendre ce que composer nous dit dans la console. Nous l'avons demander de nous installer swiftmailer, composer nous a choisi la version 6.1.3 de swiftmailer parce que c'est la version stable au moment d'écrire ce tutoriel, cette version peut donc être différente chez vous, souvenez vous du minimum-stability dans le fichier composer.json, en même temps ils nous installe les deux dépendances de swiftmailer qui sont email-validator et lexer, nous n'avons rien fait pour ça nous, et c'est là toute la beauté de cet outil. Vous pouvez maintenant regarder le fichier composer.json, la section require a été modifiée pour ajouter swiftmailer, mais ce n'est pas le seul changement sur notre projet, un autre fichier composer.lock à été créé à la racine du projet, nous allons tout de suite voir son intérêt. Le changement majeur c'est le dossier vendor qui a aussi été créé, ce dossier contient quatre dossiers, composer qui est le gestionnaire de dépendance, ensuite il y a le dossier doctrine qui contient lexer (doctrine/lexer), le dossier swiftmailer dans lequel on retrouve un autre dossier swiftmailer (swiftmailer/swiftmailer), au fait, c'est dans ce dossier vendor que composer enregistre le code source des dépendances de notre projet.

Une autre chose à préciser, composer utilise un système de cache pour éviter à chaque fois d'aller chercher les packages sur internet, ce qui peut être long. Si vous regardez sur l'image de mon terminal que je vous ai montré, devant l'installation des dépendances, il y a Loading from cache, cela est du au fait que j'ai déjà télécharger ces dépendances au paravant, composer va donc les chercher dans son cache, et comme il les trouve, il ne part pas chercher sur internet.

La question qui se pose maintenant, c’est pourquoi j’ai mis swiftmailer/swiftmailer devant le require au lieu de swiftmailer tout court?

Pour installer une dépendance, rendez-vous sur Packagist, comme on l’a dit c’est le dépôt officiel des packages PHP.