Composer
Notions théoriques
Composer est un outil de gestion des dépendances pour PHP, qui permet aux développeurs d'automatiser le processus d'installation et de mise à jour des bibliothèques qu'ils utilisent dans leurs projets.
Composer permet d'installer et de gérer les bibliothèques dont votre projet a besoin, tout en évitant les conflits entre différentes versions de ces bibliothèques.
La traduction en anglais de 'bibliothèque' est 'library'.
Ne pas confondre avec la traduction en anglais de 'librairie' qui est 'bookstore'.
Composer permet donc de gérer les dépendances de vos projets PHP.
Installer Composer
Installer composer
sous Windows
Voici les étapes pour installer la dernière version de Composer sous Windows :
-
Téléchargez l'installateur Composer depuis le site officiel de Composer : https://getcomposer.org/download/.
-
Exécutez l'installateur que vous venez de télécharger. Cela lancera l'assistant d'installation de Composer.
-
Suivez les instructions de l'assistant d'installation. Vous pouvez généralement accepter les options par défaut, sauf si vous avez des besoins spécifiques.
-
Lorsque l'installation est terminée, ouvrez une nouvelle fenêtre de terminal (Invite de commandes ou PowerShell).
-
Pour vérifier que Composer est correctement installé, tapez la commande
composer -v
.Vous devriez voir la version de Composer s'afficher, ce qui confirme que l'installation s'est déroulée avec succès.
Installer composer
sous Linux
Voici les étapes pour installer la dernière version de Composer sous Linux Debian :
-
Ouvrez un terminal.
-
Mettez à jour les packages de votre système en exécutant la commande suivante :
sudo apt update
-
Installez les dépendances nécessaires en exécutant la commande suivante :
sudo apt install php php-cli php-zip unzip
-
Téléchargez Composer en utilisant cURL en exécutant la commande suivante :
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
-
Vérifiez l'intégrité du téléchargement en exécutant la commande suivante :
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0d') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
-
Installez Composer en exécutant la commande suivante :
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
-
Pour vérifier que Composer est correctement installé, tapez la commande
composer -v
.Vous devriez voir la version de Composer s'afficher, ce qui confirme que l'installation s'est déroulée avec succès.
Le gestionnaire des bibliothèques PHP
Pour utiliser Composer, vous devez d'abord créer un fichier composer.json
dans le répertoire racine de votre projet.
Le fichier composer.json
contient une liste des dépendances de votre projet.
composer.json
et composer.lock
sont deux fichiers importants utilisés par Composer.
-
composer.json
: C'est le fichier principal que vous modifiez manuellement pour déclarer les dépendances de votre projet. Il contient des informations sur le projet et spécifie les dépendances requises, y compris leur version minimale acceptable. Par exemple, vous pouvez spécifier que votre projet nécessite la version 1.* de certaines bibliothèques. -
composer.lock
: Ce fichier est généré (ou mis à jour) automatiquement lorsque vous exécutezcomposer update
oucomposer install
sans avoir de fichier lock existant. Il contient des informations sur chaque paquet installé, y compris la version exacte qui a été installée. Cela signifie que si vous partagez votre projet avec quelqu'un d'autre et qu'il exécutecomposer install
, il recevra exactement les mêmes versions de chaque paquet, indépendamment de leurs versions actuelles.
La principale différence est donc que
composer.json
est un document que vous modifiez pour déclarer ce dont votre projet a besoin, tandis quecomposer.lock
est un document généré automatiquement qui enregistre exactement ce qui a été installé.
Cela permet une certaine flexibilité (vous pouvez accepter différentes versions d'un paquet selon les besoins de votre projet) tout en assurant la reproductibilité (tout le monde qui travaille sur le projet aura les mêmes versions des paquets, évitant ainsi les problèmes "ça marche sur ma machine").
Le répertoire central des bibliothèques PHP
Il existe un répertoire central de packages pour le langage de programmation PHP : https://packagist.org
Packagist.org fonctionne en tandem avec Composer.
Caractéristiques de Packagist.org :
-
Vaste Répertoire : Packagist.org offre un large éventail de packages PHP, couvrant une variété de fonctionnalités, allant des frameworks aux outils d'assistance au développement.
-
Intégration avec Composer : Les packages listés sur Packagist peuvent être facilement intégrés dans des projets PHP grâce à Composer, qui gère les versions et les dépendances de manière transparente.
-
Versioning Automatisé : Packagist travaille avec les systèmes de versioning comme Git, permettant aux développeurs de mettre à jour leurs packages automatiquement dès qu'une nouvelle version est publiée.
-
Recherche et Découverte : Le site propose des outils de recherche avancés pour aider les développeurs à trouver les packages dont ils ont besoin selon des critères spécifiques tels que la popularité, la maintenance ou la pertinence.
-
Facilité de Publication : Les développeurs peuvent soumettre leurs propres packages sur Packagist, les rendant ainsi accessibles à la communauté PHP mondiale.
Packagist.org a favorisé une culture de réutilisation et d'optimisation de codes PHP, permettant aux développeurs de se concentrer sur la création de fonctionnalités uniques plutôt que de réinventer la roue.
Les fichiers composer.json
et composer.lock
Composer utilise 2 fichiers : composer.json
et composer.lock
.
-
Le fichier
composer.json
est un fichier de configuration utilisé par Composer pour gérer les dépendances d'un projet PHP. Ce fichier définit les bibliothèques dont le projet a besoin et les versions appropriées, ainsi que d'autres paramètres liés à la gestion des packages.Exemple d'un fichier
composer.json
Voici un exemple simple de ce à quoi pourrait ressembler un fichier
composer.json
:{
"name": "exemple/mon-projet",
"description": "Une brève description du projet",
"type": "project",
"license": "MIT",
"require": {
"php": "^7.4 || ^8.0",
"monolog/monolog": "^2.0",
"guzzlehttp/guzzle": "^7.0.1"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"autoload": {
"psr-4": {
"MonNamespace\\": "src/"
}
},
"config": {
"optimize-autoloader": true,
"preferred-install": "dist",
"platform": {
"php": "7.4.3"
}
},
"scripts": {
"test": "phpunit --configuration phpunit.xml"
},
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
}
}Le fichier
composer.json
est essentiel pour définir l'environnement de votre projet et garantir que tous les développeurs travaillant sur le projet utilisent les mêmes versions des bibliothèques. Quand vous exécutez des commandes commecomposer install
oucomposer update
, Composer lit ce fichier pour savoir quelles versions des bibliothèques doivent être installées ou mises à jour. -
Le fichier
composer.lock
est généré par Composer et il contient des informations détaillées sur les versions exactes des packages installés, ainsi que les dépendances de ces packages pour un projet PHP donné. Ce fichier assure que le même environnement de dépendances est maintenu à travers différentes installations et environnements de développement.Exemple d'un fichier
composer.lock
Voici un exemple simplifié de ce à quoi pourrait ressembler un fichier
composer.lock
fichier :{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "b5656e4bce6a3d8113c832b0d4f04f45",
"packages": [
{
"name": "monolog/monolog",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "fe6f5ea6b0e3ad6ca6b49f7b7c2daa0d0b4e4b48"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/fe6f5ea6b0e3ad6ca6b49f7b7c2daa0d0b4e4b48",
"reference": "fe6f5ea6b0e3ad6ca6b49f7b7c2daa0d0b4e4b48",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0",
"psr/log": "^1.0.1"
},
"type": "library",
"autoload": {
"psr-4": {
"Monolog\\": "src/Monolog"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": ["MIT"],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be"
}
],
"description": "Sends your logs to files, sockets, inboxes, databases and various web services",
"homepage": "http://github.com/Seldaek/monolog",
"keywords": ["log", "logging", "psr-3"]
}
// ... more packages
],
"packages-dev": [
// ... dev packages
],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
"php": "7.4.3"
},
"platform-dev": [],
"plugin-api-version": "2.0.0"
}Cet exemple montre un seul package (
monolog/monolog
) verrouillé à une version spécifique avec une référence précise au commit dans le dépôt Git correspondant.
Installation d'une bibliothèque
Afin de tester l'installation d'une dépendance, nous allons utiliser la bibliothèque Monolog.
Monolog est une bibliothèque PHP qui permet de gérer les logs de votre application.
Niveaux de log d'une application
- DEBUG : Informations détaillées sur le flux de l'application qui sont utiles pour déboguer.
- INFO : Événements intéressants comme l'utilisateur se connectant, SQL logs.
- NOTICE : Événements normaux mais significatifs.
- WARNING : Événements exceptionnels qui ne sont pas des erreurs. Utilisez le niveau WARNING lorsque l'erreur est imminente.
- ERROR : Les erreurs d'exécution qui n'obligent pas immédiatement à arrêter le script. Utilisez le niveau ERROR pour enregistrer les exceptions qui sont gérées.
- CRITICAL : Conditions dangereuses. Exemple : composant de l'application indisponible, exception inattendue.
- ALERT : Action doit être prise immédiatement. Exemple : site Web down, base de données indisponible, etc. Ce sont les cas où vous devriez envoyer des SMS aux personnes qui peuvent résoudre le problème.
- EMERGENCY : Système hors service.
La bibliothèque PHP Monolog peut être installée via Composer https://packagist.org/packages/monolog/monolog.
Voyons comment faire, pour installer la bibliothèque Monolog, dans cet exemple pratique.
Exemple pratique
-
Initialisation du projet avec Composer
La première étape consiste à initialiser votre projet avec Composer. Ouvrez une invite de commande, naviguez vers le répertoire de votre projet et tapez la commande suivante :
composer init
Cette commande initialise un nouveau projet Composer. Elle vous guidera à travers la création d'un fichier
composer.json
, qui est utilisé par Composer pour gérer les dépendances de votre projet. Vous pouvez simplement appuyer sur Entrée pour accepter les valeurs par défaut pour la plupart des questions.Package name : VOTRE-NOM/composer-tp
Description : Small project to learn the composer tool
Author : VOTRE-NOM <VOTRE-ADRESSE-EMAIL>
Minimum Stability : stable
Package Type : project
License : MIT
Would you like to define your dependencies : no
Would you like to define your dev dependencies : no
Do you confirm generation : yes -
Ajout de Monolog comme dépendance
Nous allons ajouter Monolog comme dépendance de notre projet.
Dans le même répertoire que le fichier
composer.json
, tapez la commande suivante :composer require monolog/monolog
Cette commande met à jour le fichier
composer.json
pour inclure Monolog comme dépendance et télécharge la bibliothèque Monolog dans le répertoirevendor
. -
Installation des dépendances avec Composer
Si vous avez récupéré un projet existant ou si vous avez ajouté manuellement une dépendance dans votre fichier
composer.json
, vous devez exécuter la commande suivante pour installer les dépendances :composer install
Cette commande lit le fichier
composer.json
, télécharge toutes les dépendances requises et les installe dans le répertoirevendor
. Si les dépendances sont déjà installées, cette commande vérifie si des mises à jour sont disponibles et les installe si nécessaire. -
Utilisation de Monolog dans votre projet
Maintenant que Monolog est installé, vous pouvez l'utiliser dans votre projet. Ajoutez ce code au début de votre script PHP :
require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// Créez un journal des logs
$log = new Logger('nom-du-journal'); // Par exemple 'game'
// Ajoutez un handler qui écrit tous les messages dans jeu-combat.log
$log->pushHandler(new StreamHandler('chemin/jeu-combat.log', Logger::WARNING));
// Exemple d'ajout d'une ligne dans le fichier .log
$log->info("L'utilisateur s'est connecté avec son identifiant et son mot de passe);
// Exemple d'ajout d'une ligne dans le fichier .log
$log->error("Impossible de se connecter à la base de données");Le premier appel à
require
inclut le chargeur automatique généré par Composer, qui se charge d'inclure les fichiers nécessaires pour utiliser Monolog.Ensuite, nous créons un nouvel objet
Logger
et lui ajoutons unStreamHandler
qui écrit les messages de niveau WARNING et supérieur dans le fichierjeu-combat.log
.Enfin, nous ajoutons quelques messages au log pour tester notre configuration.
Voilà, vous avez maintenant un projet PHP qui utilise Composer pour gérer ses dépendances et qui utilise Monolog pour le logging !
Quand utiliser la commande composer install
ou composer update
?
composer install
et composer update
sont 2 commandes de Composer qui sont utilisées
pour gérer les dépendances dans un projet PHP, mais elles ont des objectifs différents :
-
composer install :
- Cette commande est utilisée pour installer les dépendances d'un projet en se basant sur le fichier
composer.lock
, qui est un instantané des versions exactes de toutes les dépendances installées la dernière fois quecomposer update
a été exécuté. - Si le fichier
composer.lock
n'existe pas,composer install
se basera sur le fichiercomposer.json
pour installer les dernières versions des dépendances qui respectent les contraintes de version spécifiées. - L'objectif principal de
composer install
est de garantir que le même ensemble de dépendances est installé quel que soit l'environnement dans lequel le projet est déployé (développement, test, production, etc.).
- Cette commande est utilisée pour installer les dépendances d'un projet en se basant sur le fichier
-
composer update :
- Cette commande est utilisée pour mettre à jour les dépendances d'un projet aux dernières versions qui respectent les contraintes définies dans
composer.json
. - Lors de l'exécution de
composer update
, Composer va rechercher les dernières versions des paquets disponibles, mettre à jour le fichiercomposer.lock
avec les nouvelles versions, et ensuite installer ces mises à jour. - Il est important de noter que
composer update
peut potentiellement introduire des changements incompatibles si les contraintes de version danscomposer.json
ne sont pas définies de manière précise.
- Cette commande est utilisée pour mettre à jour les dépendances d'un projet aux dernières versions qui respectent les contraintes définies dans
En résumé, utilisez composer install
pour installer ou réinstaller les dépendances
en vous assurant que vous utilisez les versions spécifiées dans composer.lock
.
Cela est particulièrement important pour maintenir la cohérence des environnements et éviter les problèmes liés à des mises à jour inattendues des dépendances.
Utilisez
composer update
lorsque vous souhaitez actualiser les versions des dépendances en fonction des contraintes de version définies danscomposer.json
. Cela devrait être fait prudemment, idéalement en environnement de développement, pour s'assurer que les nouvelles versions des dépendances ne cassent pas le projet.
Pourquoi utiliser Composer plutôt que include
ou require
?
Pourquoi est-il conseillé d'utiliser l'autoloader généré par Composer plutôt que l'utilisation des instructions
include
ourequire
?
Composer est un outil de gestion des dépendances pour PHP qui automatise le processus d'inclusion des bibliothèques et des classes. Voici plusieurs raisons pour lesquelles il est conseillé d'utiliser l'autoloader généré par Composer plutôt que les instructions include
ou require
manuelles :
-
Gestion automatique des dépendances : Composer télécharge et installe automatiquement toutes les bibliothèques nécessaires pour un projet, ainsi que leurs dépendances, en se basant sur le fichier
composer.json
. Cela simplifie grandement la gestion des bibliothèques tierces. -
Autoloading PSR-4 et PSR-0 : Composer implémente les standards PSR-4 et PSR-0 pour l'autoloading, qui sont des conventions de nommage permettant de charger les fichiers de classes de manière standardisée. Cela signifie que vous n'avez pas besoin d'écrire des instructions
include
ourequire
pour chaque classe ; l'autoloader de Composer s'en charge pour vous. -
Performance : L'autoloader de Composer est optimisé pour la performance. Il génère une carte de toutes les classes et de leurs chemins de fichiers, ce qui permet de charger les fichiers de manière plus efficace. De plus, il offre la possibilité de générer un autoloader optimisé avec la commande
composer dump-autoload --optimize
, qui peut améliorer encore plus les performances. -
Maintenance et lisibilité : L'utilisation de l'autoloader de Composer réduit le besoin de gérer manuellement les inclusions de fichiers, ce qui rend le code plus propre, plus lisible et plus facile à maintenir.
-
Compatibilité et interopérabilité : En utilisant Composer et les standards PSR pour l'autoloading, votre projet sera plus compatible avec d'autres projets et bibliothèques qui suivent les mêmes standards. Cela facilite l'intégration et le partage de code entre différents projets PHP.
-
Gestion des conflits de versions : Composer gère les versions des bibliothèques et s'assure que les versions compatibles sont utilisées ensemble. Cela évite les conflits qui peuvent survenir lorsque plusieurs versions d'une même bibliothèque sont incluses manuellement.
-
Facilité de mise à jour : Avec Composer, mettre à jour les bibliothèques tierces est aussi simple que d'exécuter
composer update
. Cela vérifie les dernières versions disponibles en fonction des contraintes définies danscomposer.json
et met à jour les bibliothèques en conséquence.
En résumé, l'utilisation de l'autoloader de Composer au lieu des
include
ourequire
manuels permet de simplifier et d'automatiser la gestion des dépendances, d'améliorer la performance, de maintenir le code propre et de faciliter la maintenance et les mises à jour des bibliothèques tierces.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Pour ce TP, vous allez intégrer Monolog à notre jeu de combat.
L'idée est de logger chaque action effectuée dans le jeu : attaque réussie, attaque manquée, points de vie restants, etc.
Consignes
-
Dans votre répertoire "Documents" créez le répertoire
tp_-composer
. -
Dans ce répertoire créez le fichier
main.php
:<?php
// Premiers pas avec Composer
print("Premiers pas avec Composer \n\n"); -
Testez le fonctionnement de ce fichier :
php main.php
-
Ensuite initialisez Composer dans votre projet, avec la commande :
composer init
-
Suivez les instructions à l'écran pour configurer votre fichier
composer.json
. -
Installez ensuite la bibliothèque Monolog
monolog/monolog
. -
Complétez votre fichier
main.php
pour :- inclure l'autoloader de Composer,
- créer un nouveau canal de log pour le jeu
fichier de log :
game.log
et niveau de log :DEBUG
, - écrire dans le journal
game.log
, au niveauINFO
: 'Le jeu démarre.', - écrire dans le journal
game.log
, au niveauDEBUG
: 'Le joueur attaque le monstre.', - et afficher à l'écran : "Veuillez consulter le fichier game.log".
Corigé
Une solution
Vous devez être connecté pour voir le contenu.
N'oubliez pas, la pratique est la clé pour maîtriser une nouvelle compétence. Donc, si vous n'avez pas réussi du premier coup, ne vous découragez pas et essayez à nouveau.