Skip to main content

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
Deze gids behandelt de tweede soort: het ontwikkelen van Laravel-specifieke packages. Voor packageontwikkeling heb je diepgaande kennis nodig van de interne structuur van Laravel, zoals service providers, facades en het publiceren van configuratiebestanden.
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 sectie extra.laravel uit composer.json en registreert de service providers en facades automatisch.
Met deze configuratie wordt je package automatisch geladen, zonder dat gebruikers 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 de composer.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 van Illuminate\Support\ServiceProvider en heeft twee methodes: register en boot.
Registreer geen event listeners, routes of views in de register-methode. Je zou per ongeluk services kunnen gebruiken van een andere service provider die nog niet is geladen. Doe alles behalve bindings altijd in de boot-methode.

Configuratiebestanden publiceren

publishes() — bestanden publiceren

Als je in de boot-methode publishes() aanroept, kunnen gebruikers met het vendor:publish-commando het configuratiebestand naar hun eigen applicatie kopiëren.
Na publicatie haal je de configuratiewaarden op zoals bij elke andere config-toegang.

mergeConfigFrom() — samenvoegen met standaardwaarden

Als je mergeConfigFrom() gebruikt in de register-methode, worden de standaardwaarden van het package ook gebruikt wanneer de gebruiker het configuratiebestand niet heeft gepubliceerd.
mergeConfigFrom() voegt geneste arrays niet tot op diepere niveaus samen. Bij configuraties met multidimensionale arrays kan het gebeuren dat, wanneer de gebruiker maar een deel definieert, de overige opties niet worden samengevoegd.

Publicatiegroepen scheiden met tags

Als je een tag opgeeft als tweede argument van publishes(), kunnen gebruikers alleen de resources publiceren die ze nodig hebben.

Routes registreren

Laad routebestanden met loadRoutesFrom(). Als de routecache van de applicatie actief is, wordt dit automatisch overgeslagen.
In het routebestand verwijs je naar de controllers van het package.

Migrations publiceren

Met publishesMigrations() kun je migrationbestanden publiceren. Laravel werkt de timestamps bij publicatie automatisch bij.

Views publiceren

loadViewsFrom() — views registreren

Registreer de viewsmap met loadViewsFrom(). Met de namespace uit het tweede argument verwijs je naar views in het formaat package::view.
Na registratie verwijs je naar views via de package-namespace.
Laravel zoekt views op twee plekken. Eerst controleert het de map 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 de boot-methode.
Je kunt ook in één keer registreren via een componentnamespace.

Vertaalbestanden publiceren

Registreer vertaalbestanden met loadTranslationsFrom(). Naar vertalingen verwijs je in het formaat package::file.key.
Voor JSON-vertaalbestanden gebruik je loadJsonTranslationsFrom().

Commando’s registreren

Artisan-commando’s van je package registreer je met de commands()-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 de optimizes()-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

Door PHPDoc-@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 interface DeferrableProvider te implementeren. Omdat de provider pas wordt geladen wanneer de service echt nodig is, verbetert de performance van je applicatie.
Laravel compileert en bewaart de lijst van services die deferred providers aanbieden. De provider wordt alleen geladen wanneer een van de services uit provides() wordt opgelost.
Gebruik DeferrableProvider niet voor providers die resources moeten registreren (views, routes, event listeners, enz.). Bij lazy loading blijven die resources anders ongeregistreerd.

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.
Overschrijf in je testcase getPackageProviders() om de service provider van je package te registreren.

Publiceren op Composer

Best practices voor het publiceren van je package op Packagist. Basisconfiguratie van composer.json
Door afhankelijk te zijn van illuminate/support in plaats van heel illuminate/framework, neem je alleen de Laravel-componenten op die je nodig hebt. Houd de dependency tree van je package klein.
Voorbeeld van een directorystructuur

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.
Laatst gewijzigd op 6 september 2026