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.
callAfterResolving() wordt uitgevoerd en hoe je ontwerpt voor herhaalde toepassing.
Zie Levensduur van packageservices ontwerpen voor registratiemethoden die ook in Octane en queue workers geen state meenemen. Daar worden de interne implementatie van scoped() en de aandachtspunten bij afhankelijkheden die een singleton vasthoudt uitgelegd.
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() registreer je migrationbestanden om te publiceren. In de standaardconfiguratie van Laravel 13 is database.migrations.update_date_on_publish ingeschakeld, waardoor de timestamp in de bestandsnaam bij publicatie wordt bijgewerkt. Als de instelling is uitgeschakeld of ontbreekt, gebeurt dit niet.
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.
De zoekvolgorde in de implementatie en de terugval per bestand, hoe je wijzigingen bij gepubliceerde templates krijgt en het verschil met de Blade-cache worden uitgelegd in Views van packages overschrijven en bijwerken.
Views publiceren
Blade-componenten registreren
Als je componenten in je package opneemt, registreer je die in deboot-methode.
Publieke assets distribueren
Om de JavaScript, CSS en afbeeldingen van je package te distribueren, registreer je metpublishes() een kopie naar bijvoorbeeld public_path('vendor/courier'). Als je het package bijwerkt, veranderen al gepubliceerde bestanden niet automatisch.
Het filteren op tag en provider, het verschil tussen --force en --existing, de afhandeling van verwijderde bestanden en updates via laravel-assets worden uitgelegd in Publieke assets van packages publiceren en bijwerken.
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.
--except, de uitvoeringsvolgorde ten opzichte van de standaardtaken en exitcodes bij fouten worden uitgelegd in Packagecaches integreren in optimize.
Informatie toevoegen aan het about-commando
Gebruik AboutCommand::add() om package-informatie toe te voegen aan de uitvoer van php artisan about.
--only en JSON-uitvoer, een ontwerp zonder geheimen in de uitvoer en de registratiestatus in tests worden uitgelegd in Diagnostische package-informatie toevoegen aan 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.