PHP Composer


Première utilisation de Composer

Autoloader ces classes avec Composer

Montre comment utiliser Composer pour gérer l’autoloading des classes internes à un projet.

Nous avons vu dans un précédent article comment installer Composer. Si ce dernier permet de gérer les différentes dépendances de nos projets comme les librairies externes, nous allons voir dans un premier temps comment l’utiliser pour gérer l’autoloading de nos propres classes dans un projet


 Présentation

Nous allons voir comment intégrer Composer à un projet dans le but de gérer l’ autoloading des classes d’un petit programme PHP ce qui nous évitera d’écrire le code correspondant à cette fonction.

 Le programme exemple

Nous reprendrons l’exemple utilisé dans un article précédent Auto chargement automatique des classes, le but sera de remplacer l’autoloading manuel que nous avions écrit par une gestion par Composer.

A partir de ce programme, nous allons d’abord supprimer la classe Autoloader que nous avions écrite ainsi que les références dans les autres fichiers, à cette classe.

Le projet a donc la configuration suivante (avec un fichier en moins donc) :

On supprime dans le fichier test.php l’appel à la classe Autoloader que nous avons effacé du projet :

  1. <?php
  2.  
  3. use app\clientele\Client;
  4. use app\produits\Catalogue;
  5. use app\produits\Produit;
  6.  
  7. $client = new Client();
  8. $catalogue = new Catalogue();
  9. $produit = new Produit();

Télécharger

Dans un terminal et dans le répertoire courant du projet, nous allons exécuter le programme avec la commande suivante :

Nous nous retrouvons logiquement avec un message d’erreur puisque nous n’avons plus d’autoload. Nous allons maintenant configurer Composer pour qu’il génère automatiquement un autoloader.

 Intégrer Composer au projet

Pour cela, toujours dans un terminal à la racine du projet, nous allons taper la commande suivante :

Remarque : l’option -n permet d’éviter à ce que Composer passe par une série de questions en mode interactif inutile dans le cadre de cet exemple simple.

Normalement, suite à l’exécution de la commande précédente, vous devriez vous retrouver avec un nouveau fichier à la racine du projet nommé composer.json  .

 Prise en compte de l’autoloading par Composer

Nous allons modifier le fichier composer.json   pour ajouter une rubrique "autoload" : ... pour obtenir le contenu suivant :

  1. {
  2.     "autoload": {
  3.         "psr-4" : {
  4.             "app\\": "app"
  5.         }
  6.     },
  7.     "require": {}
  8. }

Télécharger

Explications : Nous précisons que notre structure respecte la recommandation PSR-4 (correspondance entre espaces de noms et dossiers…). Nous précisons que la racine de l’espace de nom nommé "app\" correspond au contenu du dossier "app\".

Remarque : Il n’est pas obligatoire que le namespace racine ait le même nom que le dossier racine contenant les classes. Dans beaucoup de projets on trouvera le choix suivant, par exemple : "App\" : "src\" pour indiquer que les classes du namespace racine App se trouvent dans le dossier nommé src.

Une fois le fichier modifié il faut dire à Composer d’effectuer la mise à jour avec la commande suivante :

Cette commande va générer le fichier /vendor/autoload.php dont la fonction sera de générer dynamiquement l’autoloader des classes du projet.

  1. <?php
  2.  
  3. // autoload.php @generated by Composer
  4.  
  5. require_once __DIR__ . '/composer/autoload_real.php';
  6.  
  7. return ComposerAutoloaderInit8ce60dbfcc97689a5f64f55dc0945907::getLoader();
  8.  

Télécharger

Il reste à inclure ce fichier dans le fichier test.php avec un require. Ce qui donne le fichier suivant :

  1. <?php
  2.  
  3. require 'vendor/autoload.php';
  4.  
  5. use app\clientele\Client;
  6. use app\produits\Catalogue;
  7. use app\produits\Produit;
  8.  
  9. $client = new Client();
  10. $catalogue = new Catalogue();
  11. $produit = new Produit();

Télécharger

Si nous exécutons à nouveau le programme, nous n’avons plus d’erreur.

Si maintenant vous définissez de nouvelles classes dans App et que vous respectiez la correspondance entre dossiers, sous-dossiers et espaces de noms, l’autoloading sera pris en compte automatiquement par Composer. Par contre, si vous avez besoin de définir des classes dans un dossier ou sous-dossier différent de App, vous devrez ajouter une règle dans le fichier composer.json.

 Pour les utilisateurs de VSCode

Si vous utilisez Visual Studio Code pour vos développements PHP, vous pourrez installer l’extension Namespace Resolver qui permet d’importer (use) les classes utilisées dans les fichiers à partir du menu contextuel.

 Conclusion

Nous venons de voir dans cette petite introduction à Composer comment l’intégrer à un projet pour générer l’auto chargement des différentes classes que l’on ajoute au programme. Un autre avantage est que l’on pourra intégrer au projet des librairies externes aussi simplement, que ce soit des outils comme PHPUnit ou des frameworks complets comme Symfony.


Article n° 144

Crée par: chris

Créé le: 5 octobre 2019

Modifié le: 5 octobre 2019

Nombre de visites: 525

Popularité: 13 %

Popularité absolue: 1

Mots clés de cet article


SPIP

2003-2024 LePpf
Plan du site | | RSS 2.0 | Sur YouTube

Visiteurs connectés : 0

Nombre moyen de visites quotidiennes sur le site: 198