Qu’est-ce qu’un package ?
Dans Laravel, un package est un package Composer qui ajoute des fonctionnalités à votre application. Il en existe globalement deux types :- Package autonome — bibliothèque PHP générique qui ne dépend pas de Laravel (par exemple : Carbon, Pest)
- Package Laravel — package intégré à Laravel qui expose des routes, des contrôleurs, des vues, de la configuration, etc.
Pour tester votre package, utilisez Orchestra Testbench. Vous pourrez écrire les tests de votre package comme s’il s’agissait d’une application Laravel classique.
Découverte automatique des packages
Lorsqu’un package est installé, Laravel lit la sectionextra.laravel de son composer.json afin d’enregistrer automatiquement les service providers et les façades.
bootstrap/providers.php : le package est chargé automatiquement.
Le fonctionnement interne de la découverte automatique et le moment où le cache est reconstruit sont détaillés dans Fonctionnement interne de la découverte de packages.
Désactiver la découverte automatique
Si un utilisateur souhaite désactiver la découverte automatique pour un package donné, il peut le déclarer dans lecomposer.json de son application.
Rôle du service provider
Le service provider est le point d’entrée d’un package. C’est là que l’on centralise l’enregistrement des ressources (vues, configuration, migrations, routes…) auprès de Laravel. Le service provider hérite deIlluminate\Support\ServiceProvider et possède deux méthodes : register et boot.
Publication du fichier de configuration
publishes() — publier des fichiers
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 des valeurs par défaut
En utilisantmergeConfigFrom() dans la méthode register, vous garantissez que 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 comme deuxième argument àpublishes(), vous permettez aux utilisateurs de publier uniquement les ressources dont ils ont besoin.
Enregistrement des routes
UtilisezloadRoutesFrom() pour charger un fichier de routes. Si le cache des routes de l’application est actif, le chargement est automatiquement ignoré.
Publication des migrations
publishesMigrations() permet de publier les fichiers de migration. Laravel met à jour automatiquement l’horodatage au moment de la publication.
Publication des vues
loadViewsFrom() — enregistrer un dossier de vues
loadViewsFrom() enregistre un dossier de vues. Le namespace passé en deuxième argument permet ensuite de référencer les vues sous la forme package::view.
resources/views/vendor/courier de l’application, puis, à défaut, dans le dossier de vues du package. Cela permet aux utilisateurs de personnaliser les vues.
Publier les vues
Enregistrer des composants Blade
Si votre package fournit des composants Blade, enregistrez-les dans la méthodeboot.
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 sont enregistrées via la méthodecommands(). Il est courant de ne les enregistrer que dans l’environnement console.
Intégration à la commande optimize
Si le package possède son propre cache, la méthode optimizes() permet de l’intégrer aux commandes php artisan optimize et php artisan optimize:clear.
Ajouter des informations à la commande about
Pour ajouter des informations sur votre package dans la sortie de php artisan about, utilisez AboutCommand::add().
Créer une façade
Les façades permettent 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é du binding du service container depuis getFacadeAccessor().3
Déclarer le binding dans le service provider
4
Déclarer la façade dans composer.json
@method aux méthodes de la façade, vous activez l’autocomplétion dans les IDE.
DeferrableProvider — mettre en place le chargement différé
Un provider qui se contente d’enregistrer des bindings dans le service container peut être chargé de manière différée en implémentant l’interfaceDeferrableProvider. Le provider n’est chargé que lorsque le service est effectivement requis, ce qui améliore les performances de l’application.
provides() est résolu.
Tester un package
Pour tester un package indépendamment, utilisez Orchestra Testbench. Vous pourrez écrire les tests comme si vous étiez dans une application Laravel classique.getPackageProviders() pour enregistrer les service providers du package.
Publication sur Composer
Voici quelques bonnes pratiques pour publier votre package sur Packagist. Configuration de base ducomposer.json
Pages associées
Service providers
Revenez sur les méthodes
register et boot des service providers et sur les deferred providers.Gestion de la compatibilité entre versions
Découvrez les stratégies pour prendre en charge les montées de version majeures de Laravel et PHP ainsi que la configuration d’une matrice de tests GitHub Actions.