Was ist ein Paket?
Ein Paket in Laravel ist ein Composer-Paket, das der Anwendung Funktionalität hinzufügt. Grob unterscheidet man zwei Arten:- Eigenständige Pakete — Allgemeine PHP-Bibliotheken, die nicht von Laravel abhängen (z. B. Carbon, Pest).
- Laravel-Pakete — Pakete mit Funktionen, die eng mit Laravel integriert sind, etwa Routen, Controller, Views oder Konfiguration.
Wenn Sie Tests für Ihr Paket schreiben, verwenden Sie Orchestra Testbench. Damit können Sie Tests für Ihr Paket schreiben, als befänden Sie sich in einer gewöhnlichen Laravel-Anwendung.
Automatische Paket-Erkennung
Sobald ein Paket installiert wird, liest Laravel den Abschnittextra.laravel aus der composer.json und registriert Service Provider und Facades automatisch.
bootstrap/providers.php manuell bearbeiten müssen.
Wie diese automatische Erkennung intern implementiert ist und wann der Cache neu erstellt wird, erläutern wir ausführlich unter Interne Struktur der automatischen Paket-Erkennung.
Automatische Erkennung deaktivieren
Wenn Nutzer die automatische Erkennung für ein bestimmtes Paket deaktivieren möchten, konfigurieren sie dies in dercomposer.json der Anwendung.
Aufgaben des Service Providers
Der Service Provider ist der Einstiegspunkt eines Pakets. Hier bündeln Sie die Registrierung von Ressourcen wie Views, Konfiguration, Migrationen und Routen bei Laravel. Ein Service Provider erbt vonIlluminate\Support\ServiceProvider und besitzt die zwei Methoden register und boot.
Veröffentlichen von Konfigurationsdateien
publishes() — Dateien veröffentlichen
Wenn Siepublishes() in der boot-Methode aufrufen, können Nutzer die Konfigurationsdatei mit dem Befehl vendor:publish in ihre eigene Anwendung kopieren.
mergeConfigFrom() — Standardwerte zusammenführen
Wenn SiemergeConfigFrom() in der register-Methode verwenden, werden die Standardwerte des Pakets auch dann genutzt, wenn Nutzer die Konfigurationsdatei nicht veröffentlicht haben.
Veröffentlichungsgruppen mit Tags trennen
Wenn Sie im zweiten Argument vonpublishes() einen Tag angeben, können Nutzer gezielt nur die benötigten Ressourcen veröffentlichen.
Registrieren von Routen
Sie laden Route-Dateien mitloadRoutesFrom(). Wenn der Route-Cache der Anwendung aktiv ist, wird der Aufruf automatisch übersprungen.
Veröffentlichen von Migrationen
MitpublishesMigrations() lassen sich Migrationsdateien veröffentlichen. Laravel aktualisiert den Zeitstempel beim Veröffentlichen automatisch.
Veröffentlichen von Views
loadViewsFrom() — Views registrieren
MitloadViewsFrom() registrieren Sie ein View-Verzeichnis. Über den Namespace im zweiten Argument referenzieren Sie die Views im Format package::view.
resources/views/vendor/courier der Anwendung geprüft, andernfalls das View-Verzeichnis des Pakets. So können Nutzer die Views anpassen.
Views veröffentlichen
Blade-Komponenten registrieren
Wenn Sie Komponenten in Ihr Paket aufnehmen möchten, registrieren Sie sie in derboot-Methode.
Veröffentlichen von Übersetzungsdateien
MitloadTranslationsFrom() registrieren Sie Übersetzungsdateien. Übersetzungen werden im Format package::file.key angesprochen.
loadJsonTranslationsFrom().
Registrieren von Kommandos
Artisan-Kommandos eines Pakets registrieren Sie mit der Methodecommands(). Üblich ist, sie nur in der Konsolenumgebung zu registrieren.
Integration in den optimize-Befehl
Wenn Ihr Paket eigene Caches besitzt, können Sie diese mit der Methodeoptimizes() in php artisan optimize und php artisan optimize:clear einbinden.
Informationen zum about-Befehl hinzufügen
Um Paketinformationen zur Ausgabe von php artisan about hinzuzufügen, verwenden Sie AboutCommand::add().
Facades erstellen
Mit einer Facade können Sie Bindings des Service Containers so aufrufen, als handele es sich um statische Methoden.1
Service-Klasse erstellen
2
Facade-Klasse erstellen
Erben Sie von
Illuminate\Support\Facades\Facade und geben Sie in getFacadeAccessor() den Binding-Schlüssel des Service Containers zurück.3
Binding im Service Provider
4
Registrierung in composer.json
@method-Annotationen im PHPDoc der Facade-Methoden aktivieren Sie die Autovervollständigung Ihrer IDE.
DeferrableProvider — Lazy Loading umsetzen
Provider, die ausschließlich Bindings am Service Container vornehmen, können Lazy Loading realisieren, indem sie das InterfaceDeferrableProvider implementieren. Der Provider wird dann erst geladen, wenn der Service tatsächlich benötigt wird, was die Anwendungsleistung verbessert.
provides() aufgeführter Service aufgelöst wird.
Testen von Paketen
Um ein Paket isoliert zu testen, verwenden Sie Orchestra Testbench. Damit lassen sich Tests wie in einer regulären Laravel-Anwendung schreiben.getPackageProviders(), um den Service Provider des Pakets zu registrieren.
Veröffentlichung auf Composer
Best Practices für die Veröffentlichung Ihres Pakets auf Packagist: Grundkonfiguration dercomposer.json
Verwandte Seiten
Service Provider
Details zu den Methoden
register und boot sowie zu deferred Providern.Verwaltung der Versionskompatibilität
Strategien für den Umgang mit Major-Updates von Laravel und PHP sowie Konfiguration der Testmatrix in GitHub Actions.