Problématique
- Faut-il tout programmer dans un projet ?
- Risques :
- Shaving the yak ou toujours améliorer et alléger son code
- Sharpening the ax ou aiguiser ses outils pour son projet
- Pourquoi ne pas utiliser des bibliothèques ou 3rd party libraries ?
Problèmes rencontrés
- Comment installer facilement ?
- Avoir un autoload des classes
- Gestion des versions et mises à jour
- Référencement des bibliothèques
Gestionnaire de...
- Logiciel qui installe les programmes nécessaires
- Soit globalement ⇒ package manager
- Exemples : apt, npm, PEAR, etc
- Soit par projet ⇒ dependency manager
- Exemples : yarn, composer, gradle, etc
Gestionnaire de dépendances PHP
- Composer
- Installe les dépendances demandées dans le dossier
vendor/
à la racine du projet
- Dépendances et contraintes de versions dans le
composer.json
Dépendances et versions
- Exemple de
composer.json
:
{
"require": {
"monolog/monolog": "1.0.*"
}
}
monolog/monolog
: nom de la dépendance sous la forme vendorName/packageName
1.0.*
: contraintes de version (voir les détails dans la documentation)
Figer les versions
composer.lock
enregistre les numéros de versions installées
- Commande
composer install
- crée
composer.lock
lors de la 1ère exécution
- utilise ensuite les versions de
composer.lock
pour installer les dépendances, même si des versions plus récentes existent
- Important pour le travail à plusieurs ⇛ mettre le
composer.lock
dans le git ou SVN du projet
Mettre à jour les dépendances
- Commande
composer update monolog/monolog
met à jour la dépendance données en respectant les contraintes de version de composer.json
- Commande
composer update
met à jour toutes les dépendances, en respectant les contraintes de version de composer.json
- Chaque bibliothèque ayant son propre
composer.json
, Composer doit vérifier l'arbre des dépendances (peut être long si beaucoup de dépendances installées)
Autoload
- Composer crée le fichier
vendor/autoload.php
- Inclure ce fichier dans
index.php
pour avoir un autoload des classes des dépendances
- Possibilité d'ajouter un autoload PSR-4 pour le projet, par exemple :
{
"autoload": {
"psr-4": {"Jml\\": "src/"}
}
}
- Toute classe du namespace
Jml
sera autochargée à partir du dossier src/
Où sont les bibliothèques ?
- Packagist : dépôt de bibliothèques PHP
- Composer utilise Packagist par défaut
- Publier ses bibliothèques sur Packagist
- Possibilité d'utiliser un VCS privé
En bref
- Composer : outil de gestion de dépendances
- Indispendable sur les projets utilisant des bibliothèques tierces
- Installation rapide
- Génération de l'autoload