Was ist ein Paket?
Ein Paket in Laravel ist ein Composer-Paket, das die Anwendung um Funktionalität erweitert. Es gibt zwei Arten:- Standalone-Pakete — universelle PHP-Bibliotheken ohne Laravel-Abhängigkeit (z. B. Carbon, Pest).
- Laravel-Pakete — Pakete mit Laravel-integrierten Bausteinen wie Routen, Controllern, Views oder Konfiguration.
Für Pakettests nutzen Sie Orchestra Testbench. Damit lassen sich Pakettests genauso schreiben wie in einer normalen Laravel-Anwendung.
Auto-Discovery für Pakete
Bei der Installation liest Laravel den Abschnittextra.laravel aus der composer.json und registriert Service Provider und Facades automatisch.
bootstrap/providers.php nicht anpassen — das Paket wird automatisch geladen.
Auto-Discovery deaktivieren
Wollen Nutzer die Erkennung für ein bestimmtes Paket deaktivieren, tragen sie es in dercomposer.json ihrer Anwendung ein.
Rolle des Service Providers
Der Service Provider ist der Einstiegspunkt Ihres Pakets. Hier bündeln Sie die Registrierung von Views, Konfiguration, Migrationen, Routen und weiteren Ressourcen. Ein Service Provider erbt vonIlluminate\Support\ServiceProvider und hat zwei Methoden: register und boot.
Konfigurationsdateien veröffentlichen
publishes() — Dateien veröffentlichen
Ein Aufruf vonpublishes() in boot erlaubt Nutzern, Dateien über vendor:publish in die eigene Anwendung zu kopieren.
config-Helper zu.
mergeConfigFrom() — mit Defaults mergen
MitmergeConfigFrom() in register gelten Paket-Defaults auch dann, wenn der Nutzer die Datei nicht veröffentlicht hat.
Veröffentlichungsgruppen per Tag
Mit dem zweiten Argument vonpublishes() können Nutzer gezielt einzelne Ressourcengruppen veröffentlichen.
Routen registrieren
loadRoutesFrom() lädt eine Routen-Datei. Bei aktiver Routen-Cache-Kompilierung der Anwendung wird der Aufruf automatisch übersprungen.
Migrationen veröffentlichen
MitpublishesMigrations() veröffentlichen Sie Migrationen. Laravel aktualisiert dabei die Zeitstempel automatisch.
Views veröffentlichen
loadViewsFrom() — Views registrieren
Registrieren Sie das View-Verzeichnis mitloadViewsFrom(). Über den Namensraum im zweiten Argument nutzen Sie Views wie package::view.
resources/views/vendor/courier der Anwendung, ansonsten im Paketverzeichnis. So können Nutzer Views anpassen.
Views veröffentlichen
Blade-Komponenten registrieren
Bringt Ihr Paket Komponenten mit, registrieren Sie sie inboot.
Übersetzungen veröffentlichen
MitloadTranslationsFrom() registrieren Sie Übersetzungsdateien. Übersetzungen referenzieren Sie als package::file.key.
loadJsonTranslationsFrom().
Commands registrieren
Artisan-Commands Ihres Pakets registrieren Sie übercommands() — üblicherweise nur im Console-Kontext.
In optimize einklinken
Hat Ihr Paket eigene Caches, integrieren Sie sich per optimizes() in php artisan optimize und php artisan optimize:clear.
Informationen im about-Command ergänzen
Mit AboutCommand::add() erweitern Sie die Ausgabe von php artisan about.
Facades erstellen
Mit einer Facade rufen Sie Container-Bindings wie statische Methoden auf.1
Service-Klasse erstellen
2
Facade-Klasse erstellen
Erben Sie von
Illuminate\Support\Facades\Facade und geben Sie in getFacadeAccessor() den Container-Schlüssel zurück.3
Im Service Provider binden
4
In composer.json registrieren
@method-Annotationen ermöglichen IDE-Vervollständigung.
DeferrableProvider — Lazy Loading umsetzen
Provider, die nur Bindings vornehmen, können durchDeferrableProvider lazy geladen werden. Der Provider wird erst geladen, wenn der Service wirklich benötigt wird — das verbessert die Performance.
provides() gelisteter Service aufgelöst wird, lädt Laravel den Provider.
Pakete testen
Für den Test eines Pakets nutzen Sie Orchestra Testbench. Sie schreiben die Tests, als säßen Sie in einer normalen Laravel-Anwendung.getPackageProviders() überschreiben.
Veröffentlichung auf Composer
Best Practices für die Veröffentlichung auf Packagist. Grundkonfiguration dercomposer.json
Verwandte Seiten
Service Provider
Details zu
register/boot sowie zu Deferred Providern.Versionskompatibilität verwalten
Strategien für Laravel-/PHP-Major-Upgrades und die Testmatrix in GitHub Actions.