La réutilisation du code pose le problème de la gestion des dépendances, un processus historiquement assez manuel et sujet aux erreurs. Heureusement, ces dernières années, la plupart des langages de programmation ont résolu ce problème en introduisant divers outils de gestion des dépendances. Dans l’écosystème PHP, Composer est devenu le standard grâce à sa facilité d’utilisation, sa flexibilité et sa large adoption.

Bien que Composer ait été conçu pour la gestion des dépendances, vous pouvez également l’utiliser pour des tâches telles que :

  • Chargement automatique : Chargement automatique de classes et de fonctions à partir de bibliothèques externes pour les rendre facilement accessibles à partir de votre code et simplifier le processus d’intégration de code externe dans votre projet.
  • Génération de code : Générez du code type pour votre projet, comme des fichiers de configuration ou d’autres extraits de code couramment utilisés, afin d’accélérer le processus de développement et d’assurer la cohérence.
  • Création de scripts : Un système de script intégré peut automatiser des tâches courantes, telles que l’exécution de tests ou la génération de documentation à partir de votre base de code. Cela peut contribuer à rationaliser votre flux de développement et à réduire le travail manuel.

Ce tutoriel vous guide pas à pas dans la création de votre propre paquet Composer et dans sa publication sur Packagist, un dépôt de paquets PHP que les développeurs du monde entier peuvent utiliser dans leurs propres projets.

Comment fonctionne Composer ?

Tout d’abord, assurons-nous de bien comprendre le fonctionnement de Composer. En termes simples, Composer fonctionne en utilisant un fichier composer.json qui contient les définitions des dépendances de votre projet PHP. Il recherche ces paquets à partir d’un dépôt centralisé et télécharge et installe automatiquement ces dépendances en utilisant le dépôt de paquets.

En supposant que vous avez déjà installé Composer dans votre environnement de travail PHP, voici à quoi ressemble le processus de téléchargement et d’installation des dépendances :

  1. Définissez les dépendances requises pour votre projet dans un fichier composer.json dans le répertoire racine de votre projet. Ce fichier contient des informations sur les bibliothèques requises et leurs versions, ainsi que tout autre réglage de configuration ou dépendance pour ces bibliothèques.
  2. Résolvez les dépendances dans Composer à l’aide de commandes telles que install pour installer les dépendances nécessaires, update pour mettre à jour les dépendances existantes et require pour ajouter de nouvelles dépendances au fichier composer.json. Lorsque vous exécutez une commande, Composer lit le fichier composer.json pour déterminer les dépendances nécessaires, vérifie le dépôt de paquets pour la dernière version de chaque dépendance appropriée à votre environnement PHP, puis vérifie les conflits ou les contraintes de version.
  3. Composer télécharge et installe les dépendances nécessaires, y compris les bibliothèques, dans le répertoire vendor de votre projet. Composer crée un fichier composer.lock qui enregistre les versions exactes des dépendances installées.
  4. Composer met en place un « autoloader » qui charge automatiquement les classes et les fonctions des dépendances installées. Cela facilite l’utilisation des bibliothèques installées dans votre projet sans avoir à inclure manuellement chaque fichier.

En bref, Composer simplifie la gestion des dépendances dans les projets PHP, en facilitant l’installation, la mise à jour et l’utilisation de bibliothèques et de frameworks externes.

Création et publication d’un paquet Composer

Ce tutoriel vous montre comment créer une bibliothèque PHP simple appelée tempconv qui convertit la température Celsius en Fahrenheit et vice versa et termine en la publiant en tant que package Composer.

Pré-requis

Vous aurez besoin de quelques éléments avant de commencer :

  • PHP et Composer installés correctement sur votre système Au moment de la rédaction, la dernière version de Composer est la v2.6.6, mais ces instructions devraient fonctionner avec n’importe quelle variante de la v2.
  • Un compte GitHub pour créer un dépôt pour héberger votre code.
  • Un compte Packagist pour publier votre bibliothèque.

Créer un dépôt de projet

Créez votre propre dépôt GitHub pour ce tutoriel, où vous pourrez déposer le code et les fichiers de votre bibliothèque terminée.

Création du dépôt de projet sur GitHub.
Création du dépôt de projet sur GitHub.

Ce tutoriel utilise le nom de projet tempconv. Dans le champ Description, fournissez de brefs détails sur l’application. Cochez la case pour ajouter un fichier README, choisissez le modèle Composer pour l’option Add .gitignore, et sélectionnez la licence de votre choix – ce tutoriel utilise la licence MIT. Enfin, cliquez sur Créer un dépôt.

Cloner le dépôt

Clonez le dépôt que vous venez de créer sur votre machine locale. N’oubliez pas de remplacer l’URL par la vôtre, à la fois ici et tout au long de ce tutoriel :

$ git clone https://github.com/rexfordnyrk/tempconv.git

Cela crée un répertoire appelé tempconv dans votre répertoire de travail actuel. À ce stade, il ne contient que les fichiers README.md, LICENSE, et .gitignore, mais vous allez créer vos fichiers de paquets ici aussi.

Création de votre bibliothèque PHP

Dans le répertoire de votre projet, ajoutez un fichier nommé TemperatureConverter.php avec le code suivant :

<?php

namespace RexfordnyrkTempconv;

class TemperatureConverter
{
    //Caller must provide the temperature value and the unit either C Celsius or F Fahrenheit
    public function convert($temperature, $unit)
    {
        //Checking whether the unit we're working with is Celsius or Fahrenheit
        if ($unit === 'C') {
            $fahrenheit = ($temperature * 9 / 5) + 32;
            return $fahrenheit;
        } elseif ($unit === 'F') {
            $celsius = ($temperature - 32) * 5 / 9;
            return $celsius;
        } else {
            //Throwing error if the unit provided is neither C nor F
            throw new InvalidArgumentException('Invalid unit, only C (Celsius) or F (Fahrenheit) are allowed');
        }
    }
}

Cette classe possède une seule méthode appelée convert qui prend la température et l’unité comme arguments et renvoie la température convertie. Elle lève une exception si l’unité n’est pas valide.

C’est suffisant pour l’instant. Dans un scénario réel, vous écririez probablement des tests unitaires pour vous assurer que votre code fonctionne comme prévu après des modifications ou des mises à jour.

Création de votre paquet composer.

Avec le code de votre bibliothèque en place, il est temps d’en faire un paquet Composer. Vous allez générer un fichier composer.json pour votre paquet à l’aide d’un assistant étape par étape, et nous allons couvrir quelques bonnes pratiques pour organiser votre code en tant que paquetage avant de le pousser vers votre dépôt.

Générer un fichier de paquet composer.json

Bien que vous puissiez écrire manuellement le contenu d’un fichier composer.json à la racine du répertoire de votre projet, il est préférable de le générer à l’aide de la commande Composer suivante :

$ composer init

Cette commande vous fait suivre un petit assistant étape par étape. Les réponses que vous donnez à des questions telles que le nom du paquet, la description, les informations sur l’auteur et le type de licence génèrent le fichier composer.json de votre paquet.

La documentation de Composer décrit les valeurs attendues, ainsi que d’autres options que vous pouvez utiliser pour définir le fichier composer.json de votre projet.

Utilisation de composer init pour générer une configuration.
Utilisation de composer init pour générer une configuration.

Notez que l’assistant fournit des réponses prédéfinies aux questions lorsqu’elles sont applicables, telles que la dérivation de votre nom et de votre adresse e-mail à partir de git. N’hésitez pas à les modifier si vous le souhaitez.

Cette bibliothèque ne dépend d’aucun autre paquet pour fonctionner, vous pouvez donc répondre Non aux questions spécifiant des dépendances.

L’assistant vous montre un aperçu du contenu du fichier généré et vous demande de le confirmer pour terminer l’assistant.

Organisation des fichiers du paquet

L’assistant crée deux répertoires en plus du fichier composer.json:

  • src pour votre code source
  • vendor pour vos dépendances téléchargées

Déplacez le fichier TemperatureConverter.php dans le répertoire src. Si votre bibliothèque a des dépendances, exécutez composer install pour générer l’autoloader et installer les dépendances du paquetage.

Téléversement du code sur GitHub

Ajoutez vos modifications et vos nouveaux fichiers à git :

$ git add -A

Engagez les modifications apportées au dépôt local et transférez-les vers le dépôt distant sur GitHub afin de pouvoir publier facilement le projet dans la section suivante :

$ git commit -am "Initial Release" && git push

Créer une version de votre bibliothèque

Avec votre code dans votre dépôt, vous pouvez créer une version de votre bibliothèque avec un numéro de version afin que les autres développeurs puissent suivre vos mises à jour stables et significatives.

Naviguez vers votre dépôt sur GitHub, et cliquez sur Releases sous la section About. Sur la page Releases, où vous êtes censé ne rien avoir pour l’instant, cliquez sur Create a new release.

La page Releases de GitHub.
La page Releases de GitHub.

Remplissez quelques informations sur votre version, comme la version de la balise et le titre de la version. La version de la balise doit être un identifiant unique pour cette version (exemple : v1.0.0), et le titre de la version doit décrire les changements inclus dans la version (exemple : Initial release).

En option, vous pouvez ajouter une description de la version. Si vous souhaitez télécharger un fichier, tel qu’un binaire compilé ou une archive de code source, glissez-déposez le fichier dans la zone Attacher les binaires en les déposant ici ou en les sélectionnant, mais cela n’est pas nécessaire pour ce tutoriel.

Saisir les détails de la version initiale sur GitHub.
Saisir les détails de la version initiale sur GitHub.

Cliquez sur Publier la version pour créer la version.

Votre projet devrait maintenant être disponible sur la page Releases de votre dépôt. Les utilisateurs peuvent télécharger les fichiers que vous avez joints et consulter les notes de publication. En outre, si vous avez ajouté une balise pour la version, d’autres développeurs peuvent utiliser cette balise pour vérifier le code exact qui a été inclus dans la version.

Votre bibliothèque est prête à être partagée avec le monde entier. Publions-la en tant que paquet sur Packagist.

Commencer avec Packagist

Packagist est le principal dépôt de paquets pour PHP. Il fournit un emplacement central pour que les développeurs publient et partagent leurs paquets PHP, et pour que les autres développeurs découvrent et utilisent ces paquets dans leurs propres projets. Publions votre paquet !

Naviguez sur le site web de Packagist, cliquez sur Connexion, et sélectionnez GitHub comme méthode de connexion pour utiliser votre compte GitHub pour l’authentification.

S'inscrire sur Packagist avec GitHub.
S’inscrire sur Packagist avec GitHub.

Cliquez sur Autoriser pour accorder à Packagist la permission d’accéder à votre compte.

Connexion réussie sur Packagist avec GitHub.
Connexion réussie sur Packagist avec GitHub.

Soumettre votre package Composer sur Packagist

Pour publier un package sur Packagist, soumettez le dépôt GitHub contenant le fichier composer.json qui décrit votre package et ses dépendances. Cliquez sur Submit sur le site de Packagist, fournissez l’URL de votre dépôt sur la page qui s’affiche, et cliquez sur Check pour le valider.

Si le dépôt est valide, Packagist détecte le nom du paquet, et le bouton Check devient Submit.

Le paquet Composer rexfordnyrk/tempconv est validé et prêt à être soumis.
Le paquet Composer rexfordnyrk/tempconv est validé et prêt à être soumis.

Cliquez sur Submit, et Packagist prend un moment pour configurer et publier votre projet.

Paquet Composer publié.
Paquet Composer publié.

Voilà, c’est fait ! Votre paquet est maintenant disponible sur Packagist pour que d’autres développeurs puissent l’utiliser comme dépendance dans leurs propres projets.

Utiliser votre paquet Composer dans d’autres projets

Vous pouvez utiliser votre paquet publié dans d’autres projets en l’ajoutant comme dépendance dans le fichier composer.json. Vous pouvez créer et modifier manuellement le fichier, mais il est préférable d’utiliser la commande Composer comme suit :

$ composer require rexfordnyrk/tempconv

Composer crée automatiquement le fichier composer.json s’il n’existe pas déjà, puis il trouve, télécharge et charge automatiquement le paquetage à partir de Packagist. La sortie devrait ressembler à ceci :

Screenshot of the terminal after adding a library to a project with Composer.

Créez un fichier demo.php contenant le code de votre application de démonstration pour travailler avec votre bibliothèque.
Vous pouvez ensuite utiliser la classe TemperatureConverter dans le code de votre application comme suit :

<?php
use RexfordnyrkTempconvTemperatureConverter;

require_once './vendor/autoload.php';

$converter =  new TemperatureConverter();

$fahrenheit = $converter->convert(20, 'C');
echo "20°C is equivalent to $fahrenheit °Fn";

$celsius = $converter->convert(68, 'F');
echo "68°F is equivalent to $celsius °Cn";

Ce code utilise la classe TemperatureConverter pour convertir les températures 20 Celsius et 68 Fahrenheit et afficher les résultats. Le fichier importé autoloader.php a été créé par Composer pour charger toutes les dépendances dont vous avez besoin. Il se charge de charger la classe automatiquement lorsque c’est nécessaire.

Enfin, exécutez ce code dans votre terminal :

$ php demo.php

Vous devriez obtenir un résultat similaire à celui-ci :

$ php demo.php
20°C is equivalent to 68 °F
68°F is equivalent to 20 °C

Résumé

Vous venez de créer une bibliothèque PHP simple qui convertit la température Celsius en Fahrenheit et vice versa dans une classe orientée objet qui peut être réutilisée dans d’autres applications. Vous avez vu comment utiliser Composer pour créer un package à partir de la classe avec la commande Composer Init, et vous avez appris quelques bonnes pratiques d’organisation du code pour votre bibliothèque. Vous avez publié votre bibliothèque sur Packagist, afin que vous et d’autres développeurs puissiez l’utiliser comme dépendance dans d’autres projets.

Bien sûr, une fois que vous aurez fini de développer votre application, vous aurez besoin de l’héberger. Faites passer votre développement PHP au niveau supérieur avec l’hébergement d’applications web chez Kinsta. Vous pouvez déployer votre application PHP basée sur Composer en quelques minutes. Ajoutez simplement votre application via le dépôt git de votre projet, et Kinsta s’occupe du reste. Il détecte automatiquement le fichier Composer et construit votre application automatiquement. Commencez sans risque dès aujourd’hui !

Rexford Nyarko

Rexford Nyarko is a solution architect with a background in software and network systems, cloud environments, server administration, and various database technologies. Rexford particularly enjoys explaining technical concepts to non-technical audiences.