Composer

Ce tutoriel est déprécié ! Un tutoriel plus récent est maintenant disponible : L'autoloader.
Voir la vidéo
Ce tutoriel est déprécié ! Un tutoriel plus récent est maintenant disponible : L'autoloader.

Composer est un gestionnaire de dépendance qui vous permettra de définir les différentes dépendances pour votre projet. Composer utilise un fichier composer.json qui contient plusieurs informations sur le projet dont la liste des librairies utilisées. Il est ensuite capable de télécharger automatiquement ces librairies (et les dépendances associées) et de générer un autoloader pour les utiliser simplement dans vos projets PHP

Installation

L'installation de composer est très simple (dans les 2 cas il faut avoir la commande php disponible dans le terminal) :

  • Si vous êtes sur Windows il vous suffit de télécharger le fichier composer-setup.exe qui ajoutera automatiquement la commande composer au PATH de votre système.
  • Sur UNIX il faut télécharger composer.phar en tapant la ligne curl -sS https://getcomposer.org/installer | php dans votre terminal. Vous pourrez ensuite éxécuter composer en faisant php composer.phar

Utilisation

Comme précisé au début, il nous faut un fichier composer.json pour spécifier les différentes dépendances :

{
    "name": "moi/app",
    "require": {
        "php": ">=5.3",
    },
    "authors": [
        {
            "name": "",
            "email": ""
        }
    ]
}

Dans la partie require vous allez pouvoir mettre les paquets que vous souhaitez utiliser pour votre projet. Si par exemple j'ai besoin de parser du markdown :

 "require": {
    "michelf/php-markdown": "1.4.*@dev"
},

La liste de tous les packages est disponible sur packagist.org. Une fois la liste des dépendances spécifiés vous n'avez plus qu'à les installer avec un :

php composer.phar install
# ou dans le cas d'une mise à jour :
php composer.phar update

Cela aura pour effet de créer (ou mettre à jour) le dossier vendor qui va contenir votre librairie. L'avantage c'est que composer est capable de gérer les dépendances, donc si votre librairie à besoin d'une autre librairie pour fonctionner elle sera automatiquement téléchargée.

Et dans mon PHP

Alors, c'est bien sympa de télécharger des librairie mais encore faut-il être en mesure de les inclure. Lors d'un install ou d'un update composer va automatiquement généré un autoloader autoload.php disponible à la racine du dossier vendor.
Cet autoloader permet de ne pas avoir à inclure les fichier des différentes librairies mais utilise un système d'autoloader, vous n'avez qu'à vous soucier des namespace.

<?php
require "vendor/autoload.php"; // J'inclue l'autoload
// Je veux utiliser mon plugin michelf/php-markdown, j'utilise les namespace
use \Michelf\Markdown;        // L'autoload va automatiquement inclure le fichier
echo Markdown::defaultTransform("Salut les gens j'essai le **markdown**");

Autoload

Mais que se passe-t-il si je veux utiliser ce super autoload pour des classes perso que j'ai créé moi même avec amour ?
Dans le fichier composer.json il est possible de préciser des dossiers correspondant à un namespace particulier. Dans mon cas je vais mettre mon application dans un dossier App/ et le nom de mon namespace sera App (original non ?).

Dans le fichier composer.json
...
"autoload": {
    "psr-4" : {"App\\" : "App"}
}
...

On relance un pti coup de composer install (ou update) et l'autoload sera mis à jour avec notre nouveau dossier. On peut alors inclure n'importe quel class de notre dossier app en faisant

<?php
use App\Helper\Form;
// Cherchera le fichier App/Helper/Form.php

Au passage, si vous n'utilisez pas les namespace c'est le moment de vous y mettre ^^.

Conclusion

Composer a réussi là où PEAR a échoué, mettre en place un registre de librairie PHP facile à utiliser et gérant simplement les dépendances. Composer est adopté par la majorité de la communauté PHP (CakePHP, Laravel, Symfony... ils l'utilisent tous) et vous permettra de gérer simplement les dépendances de vos projets.

Publié
Technologies utilisées
Auteur :
Grafikart
Partager