Wat is een package?
Een package in Laravel is een Composer-package dat functionaliteit toevoegt aan je applicatie. Er zijn grofweg twee soorten packages:- Standalone packages — generieke PHP-libraries die niet van Laravel afhankelijk zijn (bijvoorbeeld Carbon, Pest)
- Laravel-packages — packages met functionaliteit die met Laravel is geïntegreerd, zoals routes, controllers, views en configuratie
Voor het schrijven van tests voor je package gebruik je Orchestra Testbench. Je kunt packagetests schrijven zoals je dat in een gewone Laravel-applicatie doet.
Automatische detectie van packages
Wanneer een package wordt geïnstalleerd, leest Laravel de sectieextra.laravel uit composer.json en registreert de service providers en facades automatisch.
bootstrap/providers.php handmatig hoeven aan te passen.
Hoe deze automatische detectie is geïmplementeerd en wanneer de cache opnieuw wordt opgebouwd, lees je in detail in De interne structuur van package discovery.
Automatische detectie uitschakelen
Als een gebruiker de automatische detectie van een specifiek package wil uitschakelen, stelt die dat in decomposer.json van de applicatie in.
De rol van de service provider
De service provider is het toegangspunt van je package. Hier centraliseer je alle logica om resources zoals views, configuratie, migrations en routes bij Laravel te registreren. Een service provider erft vanIlluminate\Support\ServiceProvider en heeft twee methodes: register en boot.
Configuratiebestanden publiceren
publishes() — bestanden publiceren
Als je in deboot-methode publishes() aanroept, kunnen gebruikers met het vendor:publish-commando het configuratiebestand naar hun eigen applicatie kopiëren.
mergeConfigFrom() — samenvoegen met standaardwaarden
Als jemergeConfigFrom() gebruikt in de register-methode, worden de standaardwaarden van het package ook gebruikt wanneer de gebruiker het configuratiebestand niet heeft gepubliceerd.
Publicatiegroepen scheiden met tags
Als je een tag opgeeft als tweede argument vanpublishes(), kunnen gebruikers alleen de resources publiceren die ze nodig hebben.
Routes registreren
Laad routebestanden metloadRoutesFrom(). Als de routecache van de applicatie actief is, wordt dit automatisch overgeslagen.
Migrations publiceren
MetpublishesMigrations() kun je migrationbestanden publiceren. Laravel werkt de timestamps bij publicatie automatisch bij.
Views publiceren
loadViewsFrom() — views registreren
Registreer de viewsmap metloadViewsFrom(). Met de namespace uit het tweede argument verwijs je naar views in het formaat package::view.
resources/views/vendor/courier van de applicatie; als die er niet is, gebruikt het de viewsmap van het package. Zo kunnen gebruikers de views aanpassen.
Views publiceren
Blade-componenten registreren
Als je componenten in je package opneemt, registreer je die in deboot-methode.
Vertaalbestanden publiceren
Registreer vertaalbestanden metloadTranslationsFrom(). Naar vertalingen verwijs je in het formaat package::file.key.
loadJsonTranslationsFrom().
Commando’s registreren
Artisan-commando’s van je package registreer je met decommands()-methode. Het is gebruikelijk om ze alleen in de console-omgeving te registreren.
Integratie met het optimize-commando
Als je package een eigen cache heeft, kun je met deoptimizes()-methode integreren met php artisan optimize en php artisan optimize:clear.
Informatie toevoegen aan het about-commando
Gebruik AboutCommand::add() om package-informatie toe te voegen aan de uitvoer van php artisan about.
Een facade maken
Met een facade kun je een binding uit de service container aanroepen alsof het statische methodes zijn.1
Maak een serviceklasse
2
Maak een facade-klasse
Erf van
Illuminate\Support\Facades\Facade en geef in getFacadeAccessor() de bindingssleutel van de service container terug.3
Bind in de service provider
4
Registreer in composer.json
@method-annotaties aan de facademethodes toe te voegen, werkt de autocomplete van je IDE.
DeferrableProvider — lazy loading implementeren
Een provider die alleen bindings aan de service container toevoegt, kan lazy loading realiseren door de interfaceDeferrableProvider te implementeren. Omdat de provider pas wordt geladen wanneer de service echt nodig is, verbetert de performance van je applicatie.
provides() wordt opgelost.
Packages testen
Om je package op zichzelf te testen gebruik je Orchestra Testbench. Je kunt packagetests schrijven alsof je in een gewone Laravel-applicatie zit.getPackageProviders() om de service provider van je package te registreren.
Publiceren op Composer
Best practices voor het publiceren van je package op Packagist. Basisconfiguratie vancomposer.json
Gerelateerde pagina’s
Service providers
Bekijk de details van de
register- en boot-methodes van service providers en van deferred providers.Versiecompatibiliteit beheren
Uitleg over strategieën voor major-upgrades van Laravel en PHP en de testmatrixconfiguratie van GitHub Actions.