Skip to main content

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.
Diese Anleitung behandelt die zweite Kategorie: die Entwicklung Laravel-spezifischer Pakete. Für die Paketentwicklung müssen Sie die internen Strukturen von Laravel — Service Provider, Facades, das Veröffentlichen von Konfigurationsdateien und mehr — gut kennen.
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 Abschnitt extra.laravel aus der composer.json und registriert Service Provider und Facades automatisch.
Mit dieser Konfiguration wird das Paket automatisch geladen, ohne dass die Nutzer 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 der composer.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 von Illuminate\Support\ServiceProvider und besitzt die zwei Methoden register und boot.
Registrieren Sie in der register-Methode keine Event-Listener, Routen oder Views. Sie könnten sonst versehentlich Services eines noch nicht geladenen Service Providers verwenden. Alles außer Bindings gehört in die boot-Methode.

Veröffentlichen von Konfigurationsdateien

publishes() — Dateien veröffentlichen

Wenn Sie publishes() in der boot-Methode aufrufen, können Nutzer die Konfigurationsdatei mit dem Befehl vendor:publish in ihre eigene Anwendung kopieren.
Nach der Veröffentlichung greifen Sie auf die Konfigurationswerte wie üblich zu.

mergeConfigFrom() — Standardwerte zusammenführen

Wenn Sie mergeConfigFrom() in der register-Methode verwenden, werden die Standardwerte des Pakets auch dann genutzt, wenn Nutzer die Konfigurationsdatei nicht veröffentlicht haben.
mergeConfigFrom() führt verschachtelte Arrays nicht rekursiv zusammen. Bei Konfigurationen mit mehrdimensionalen Arrays kann es vorkommen, dass restliche Optionen nicht ergänzt werden, wenn Nutzer nur einen Teil definieren.

Veröffentlichungsgruppen mit Tags trennen

Wenn Sie im zweiten Argument von publishes() einen Tag angeben, können Nutzer gezielt nur die benötigten Ressourcen veröffentlichen.

Registrieren von Routen

Sie laden Route-Dateien mit loadRoutesFrom(). Wenn der Route-Cache der Anwendung aktiv ist, wird der Aufruf automatisch übersprungen.
In der Route-Datei geben Sie die Controller des Pakets an.

Veröffentlichen von Migrationen

Mit publishesMigrations() lassen sich Migrationsdateien veröffentlichen. Laravel aktualisiert den Zeitstempel beim Veröffentlichen automatisch.

Veröffentlichen von Views

loadViewsFrom() — Views registrieren

Mit loadViewsFrom() registrieren Sie ein View-Verzeichnis. Über den Namespace im zweiten Argument referenzieren Sie die Views im Format package::view.
Nach der Registrierung sprechen Sie Views über den Paket-Namespace an.
Laravel sucht die Views an zwei Orten: Zuerst wird das Verzeichnis 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 der boot-Methode.
Sie können Komponenten auch en bloc über einen Komponenten-Namespace registrieren.

Veröffentlichen von Übersetzungsdateien

Mit loadTranslationsFrom() registrieren Sie Übersetzungsdateien. Übersetzungen werden im Format package::file.key angesprochen.
Wenn Sie JSON-Übersetzungsdateien nutzen, verwenden Sie loadJsonTranslationsFrom().

Registrieren von Kommandos

Artisan-Kommandos eines Pakets registrieren Sie mit der Methode commands(). Ü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 Methode optimizes() 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

Mit @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 Interface DeferrableProvider implementieren. Der Provider wird dann erst geladen, wenn der Service tatsächlich benötigt wird, was die Anwendungsleistung verbessert.
Laravel kompiliert die Liste der von deferred Providern bereitgestellten Services und speichert sie ab. Der Provider wird erst geladen, wenn ein in provides() aufgeführter Service aufgelöst wird.
Verwenden Sie DeferrableProvider nicht für Provider, die Ressourcen registrieren (Views, Routen, Event-Listener usw.). Beim Lazy Loading würden diese Ressourcen nicht registriert werden.

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.
Überschreiben Sie in Ihren Testfällen 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 der composer.json
Durch die Abhängigkeit von illuminate/support binden Sie nur die tatsächlich benötigten Laravel-Komponenten ein und nicht das gesamte illuminate/framework. Halten Sie den Abhängigkeitsbaum Ihres Pakets klein.
Beispielhafte Verzeichnisstruktur

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.
Zuletzt geändert am 2. August 2026