Le coeur de Composer
Lors du dernier blogue nous avons diagnostiqué l'installation de composer dans mon ordinateur.
Quelques problèmes ont été identifiés :
- La non-configuration de la clef publique pour la récupération ;
- Un problème dans le format du fichier composer.json qui m'empêcherait de le publier.
Le dernier point est intéressant car il ouvre la porte à mieux comprendre un mystérieu fichier essentiel au fonctionnement de composer : le fameux fichier json !
Composer.json
Ce fichier est nécessaire pour utiliser composer dans un projet ; il énumère les dépendances du projet et contient d'autres méta-données. Il est normalement mis à la racine du projet. Pour être publié dans le répertoire de dépôt officiel de PHP The Packagist, il doit obligatoirement être mis à la racine.
Sa structure interne est dans le format json avec ses fameuses accolades, crochets et les deux points qui structurent les données telle une symphonie numériques de données bien orchestrées par un chef.
Le mot-clef require permet de spécifier les dépendances externes qu'on doit obtenir. On doit ensuite spécifier le nom de le dépendance ainsi que la version requise. Le comportement par défaut de Composer est d'aller voir si la dépendance existe dans le répertoire The Packagist si elle existe. Cependant, dans le cas où l'utilisateur popule des valeurs dans la clef Repositories, alors composer va chercher dans les endroits spécifiés plutôt que dans le répertoire par défaut.
Voici un exemple du site getcomposer :
{
"repositories": [
{
"type": "composer",
"url": "http://idefix.crosemont.qc.ca/mon-validateur-php"
},
{
"type": "composer",
"url": "http://idefix.crosemont.qc.ca/mon-validateur-php",
"options": {
"ssl": {
"verify_peer": "true"
}
}
},
{
"type": "vcs",
"url": "https://github.com/mon-validateur-php"
},
{
"type": "package",
"package": {
"name": "smarty/smarty",
"version": "3.1.7",
"dist": {
"url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
"type": "zip"
},
"source": {
"url": "https://smarty-php.googlecode.com/svn/",
"type": "git",
"reference": "tags/Smarty_3_1_7/distribution/"
}
}
}
]
}
```
On peut déjà remarquer quelques points intéressants :
- Les deux premiers sont des dépôts composer. La différence est que le deuxième spécifie qu'il utilise SSL comme méthode de transport. Donc, la connexion devrait être sécurisé. Dans ce cas-ci, les dépôts ne sont pas hébergés sur le site officiel de composer.
- Le troisième est de type VSC (version control system où système de contrôle de version) et l'url pointe vers Github. L'url aurait pu aussi pointer vers un autre système de contrôle de version comme SVN ou Mercurial. C'est pour quand la librairie n'est pas encore publiée en tant que package composer officiel. On obtient alors directement le code source.
- Le quatrième est pour obtenir une version déjà empacquetée de la librarie sous format compressé ici précisé en zip. On précise le nom, la version ainsi que l'endroit où le code source est emmagasiné, l'étiquette de référrence et le logiciel utilisé pour le dépôt source.
Autoload
Cet attribut permet de demander à Composer de charger automatiquement une librairie et un dossier contenant des classes. Grâce à cela, il n'est plus nécessaire d'inclure les classes manuellement.
Voici un exemple de ce site :
{
"autoload": {
"classmap": ["app/modele"]
}
}
Si vous avez les classes Utilisateur_Progression et Question dans dossier modele, alors vous pourrez charger dans votre projet
<?php
$utilisateur = new Utilisateur_Progression();
$question = new Question();
```
On peut aussi spécifier l'espace de nom avec PSR-4 (PHP Standards Recommendation 4), qui est le plus récent standard pour déterminer comme faire l'autoloading avec PHP.
Alors les classes chargées seront regroupés dans un espace de nom, ce qui limitera les conflits potentiels entre les noms de classes.
{
"autoload": {
"psr-4": {
"MonNamespace\\": "src/"
},
"classmap": [
"lib/",
"src/Utils.php"
],
"files": [
"src/helpers.php"
]
}
}
Et files permet d'inclure des variables globales ou des fonctions, donc pas juste des classes.
Conclusion
Enfin, une fois l'option autoload utilisée et le fichier composer.json modifié, il ne faut pas oublier la dernière étape qui consiste à faire la commande composer dump-autoload
. En effet, cette commande va générer un fichier permettant l'auto-chargement des classes et fichiers nécessaires utiliser les librairies associées. Ces fichiers sont typiquement créés dans le dossier vendor/
. Et il ne faut pas oublier l'option --optimize
qui permettrait d'accélérer la recherche des librairies et créant un fichier indiquant où trouver les classes, fonctions ou variables dans les différentes librairies chargées automatiquement.
J'espère que cet article vous aura aidé à comprendre un peu mieux ce fichier. Nous irons plus en détails la semaine prochaine. D'ici-là, bonne fin de semaine !
Sources
-
Composer, "Repositories", https://getcomposer.org/doc/04-schema.md#repositories (Page consultée le 21 février 2025).
-
Packagist, "Packagist: The PHP Package Repository", https://packagist.org (Page consultée le 21 février 2025).
-
PHP Tutorial, "PHP Composer Autoload", https://www.phptutorial.net/php-oop/php-composer-autoload/ (Page consultée le 21 février 2025).
-
Hamid Roohany, "Understanding Autoload PSR-4 in PHP: Simplifying Class Loading for Efficient Development", https://medium.com/@hamid.roohany/understanding-autoload-psr-4-in-php-simplifying-class-loading-for-efficient-development-70e0e21dbe40 (Page consultée le 21 février 2025).
Commentaires