Qu’est-ce qu’un package
En Laravel, un package est un package Composer qui ajoute des fonctionnalités à votre application. Il en existe deux grandes catégories :- Packages autonomes — bibliothèques PHP génériques indépendantes de Laravel (ex. : Carbon, Pest).
- Packages Laravel — packages intégrés à Laravel comportant routes, contrôleurs, vues, configuration, etc.
Pour écrire des tests de package, utilisez Orchestra Testbench. Vous pouvez alors rédiger vos tests comme dans une application Laravel classique.
Découverte automatique du package
Lors de l’installation d’un package, Laravel lit la sectionextra.laravel du composer.json pour enregistrer automatiquement les service providers et les façades.
bootstrap/providers.php : le package est chargé automatiquement.
Désactiver la découverte automatique
Pour désactiver la découverte automatique d’un package spécifique côté utilisateur, il suffit de le déclarer dans lecomposer.json de l’application.
Rôle du service provider
Le service provider est le point d’entrée du package. C’est là que vous enregistrez auprès de Laravel les ressources telles que vues, configuration, migrations et routes. Un service provider hérite deIlluminate\Support\ServiceProvider et possède deux méthodes : register et boot.
Publication du fichier de configuration
publishes() — exposer un fichier
En appelantpublishes() dans boot, vous permettez aux utilisateurs de copier le fichier de configuration dans leur application via la commande vendor:publish.
mergeConfigFrom() — fusionner avec les valeurs par défaut
En utilisantmergeConfigFrom() dans register, les valeurs par défaut du package sont utilisées même lorsque l’utilisateur n’a pas publié le fichier de configuration.
Séparer les groupes de publication par tag
En passant un tag en second argument depublishes(), l’utilisateur peut publier uniquement les ressources dont il a besoin.
Enregistrement des routes
Chargez le fichier de routes vialoadRoutesFrom(). Si le cache des routes de l’application est actif, cet appel est automatiquement ignoré.
Publication des migrations
publishesMigrations() permet de publier les fichiers de migration. Laravel met automatiquement à jour l’horodatage lors de la publication.
Publication des vues
loadViewsFrom() — enregistrer les vues
loadViewsFrom() enregistre un répertoire de vues. Le second argument est le namespace qui permet de référencer les vues sous la forme package::view.
resources/views/vendor/courier de l’application, puis dans le répertoire des vues du package. Cela permet à l’utilisateur de personnaliser les vues.
Publier les vues
Enregistrer des composants Blade
Si votre package inclut des composants, enregistrez-les dansboot.
Publication des fichiers de traduction
loadTranslationsFrom() enregistre les fichiers de traduction. Les traductions se référencent sous la forme package::file.key.
loadJsonTranslationsFrom().
Enregistrement des commandes
Les commandes Artisan du package s’enregistrent viacommands(). Il est courant de ne les enregistrer qu’en environnement console.
Intégration à la commande optimize
Si votre package possède son propre cache, vous pouvez l’intégrer àphp artisan optimize et php artisan optimize:clear via la méthode optimizes().
Ajouter des informations à la commande about
Pour ajouter des informations sur votre package à la sortie de php artisan about, utilisez AboutCommand::add().
Créer une façade
Une façade permet d’appeler un binding du service container comme s’il s’agissait d’une méthode statique.1
Créer la classe de service
2
Créer la classe façade
Héritez de
Illuminate\Support\Facades\Facade et renvoyez la clé de binding du service container depuis getFacadeAccessor().3
Binder dans le service provider
4
Enregistrer dans composer.json
@method en PHPDoc, l’auto-complétion de l’IDE est activée.
DeferrableProvider — mettre en place le chargement différé
Un provider qui n’effectue que des bindings dans le service container peut être chargé de manière différée en implémentant l’interfaceDeferrableProvider. Le provider n’étant chargé que lorsque le service est réellement demandé, cela améliore les performances de l’application.
provides() est résolu.
Tester un package
Pour tester le package seul, utilisez Orchestra Testbench. Vous pouvez rédiger vos tests comme si vous étiez à l’intérieur d’une application Laravel classique.getPackageProviders() pour enregistrer le service provider du package.
Publier sur Composer
Voici les bonnes pratiques pour publier un package sur Packagist. Configuration de base ducomposer.json
Pages associées
Service providers
Détails sur les méthodes
register et boot du service provider et les providers différés.Gestion de la compatibilité de versions
Stratégie pour gérer les mises à jour majeures de Laravel et PHP et configuration de la matrice de test GitHub Actions.