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.
callAfterResolving() und ein Design erläutert, das mehrfache Anwendung verträgt.
Wie Sie Services so registrieren, dass auch in Octane und Queue-Workern kein Zustand mitgeschleppt wird, erfahren Sie unter Lebenszyklus-Design für Paket-Services. Dort werden die interne Implementierung von scoped() und die Fallstricke bei von Singletons gehaltenen Abhängigkeiten erläutert.
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() registrieren Sie Migrationsdateien zur Veröffentlichung. In der Standardkonfiguration von Laravel 13 ist database.migrations.update_date_on_publish aktiviert, daher wird der Zeitstempel im Dateinamen beim Veröffentlichen aktualisiert. Ist die Einstellung deaktiviert oder nicht vorhanden, findet diese Aktualisierung nicht statt.
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.
Die Suchreihenfolge in der Implementierung, den Fallback pro Datei, die Auslieferung von Änderungen an veröffentlichte Templates und den Unterschied zum Blade-Cache erläutert Paket-Views überschreiben und aktualisieren.
Views veröffentlichen
Blade-Komponenten registrieren
Wenn Sie Komponenten in Ihr Paket aufnehmen möchten, registrieren Sie sie in derboot-Methode.
Öffentliche Assets ausliefern
Um JavaScript, CSS und Bilder Ihres Pakets auszuliefern, registrieren Sie mitpublishes() eine Kopie etwa nach public_path('vendor/courier'). Wenn Sie das Paket aktualisieren, ändern sich bereits veröffentlichte Dateien nicht automatisch.
Die Auswahl über Tags und Provider, den Unterschied zwischen --force und --existing, den Umgang mit gelöschten Dateien und Updates über laravel-assets erläutert Öffentliche Paket-Assets veröffentlichen und aktualisieren.
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.
--except, die Ausführungsreihenfolge gegenüber den Standard-Tasks und Exit-Codes bei Fehlern werden unter Paket-Caches in optimize integrieren erläutert.
Informationen zum about-Befehl hinzufügen
Um Paketinformationen zur Ausgabe von php artisan about hinzuzufügen, verwenden Sie AboutCommand::add().
--only und die JSON-Ausgabe funktionieren, wie Sie keine Geheimnisse ausgeben und wie Sie den Registrierungszustand in Tests behandeln, erfahren Sie unter Paket-Diagnoseinformationen zu about hinzufügen.
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.