Was ist GeneratorCommand?
Illuminate\Console\GeneratorCommand ist die abstrakte Basisklasse aller Code-Generierungs-Befehle in Laravel. make:model, make:controller, make:request usw. leiten alle von dieser Klasse ab.
Bietet ein Paket einen eigenen make:xxx-Befehl an, so muss der Nutzer keine Klassen von Hand anlegen. Ein php artisan make:handler OrderHandler genügt, um eine Datei mit korrektem Namensraum zu erzeugen.
GeneratorCommand wird in der offiziellen Doku kaum erwähnt und ist ohne Blick in den Framework-Code kaum zu verstehen — ein klassisches Advanced-Thema.Minimale Implementierung
Die einzig zwingend erforderliche Methode in einer vonGeneratorCommand abgeleiteten Klasse ist getStub(). Alle anderen Properties sind optional, in der Praxis definiert man aber typischerweise diese:
| Element | Typ | Rolle |
|---|---|---|
$name | Property | Kommandoname (z. B. make:handler) |
$description | Property | Beschreibung des Befehls |
$type | Property | Bezeichnung des Artefakts — erscheint in der Erfolgsmeldung (z. B. Handler) |
getStub() | Methode (Pflicht) | Gibt den Pfad zur Stub-Datei zurück |
getDefaultNamespace() | Methode | Steuert den Ziel-Namensraum |
make:handler-Befehls:
getDefaultNamespace() legt php artisan make:handler OrderHandler die Klasse App\Handlers\OrderHandler in app/Handlers/OrderHandler.php an.
Stub-Datei erstellen
Legen Sie eine Stub-Datei an dem Pfad ab, dengetStub() zurückgibt. Ein Stub ist eine PHP-Vorlage, in der Platzhalter für Namensraum und Klassennamen ersetzt werden.
src
Console
Commands
HandlerMakeCommand.php
stubs
handler.stub
handler.stub
GeneratorCommand ersetzt in Stubs automatisch folgende Platzhalter:
| Platzhalter | Ersetzter Wert | Alternative Notation |
|---|---|---|
{{ namespace }} | Namensraum der erzeugten Klasse | DummyNamespace |
{{ class }} | Name der erzeugten Klasse | DummyClass |
{{ rootNamespace }} | Root-Namensraum der App | DummyRootNamespace |
{{ namespace }} und DummyNamespace liefern das gleiche Ergebnis. In den Laravel-Stubs sind beide Formen enthalten; für neue Stubs empfehlen wir die Form {{ namespace }}.
Stubs anpassbar machen
Um Nutzern zu erlauben, die Stubs zu überschreiben, nutzen Sie dasresolveStubPath()-Muster. Zunächst veröffentlichen Sie die Stubs im boot() des Service Providers.
getStub() das vom Nutzer angepasste Stub bevorzugt verwenden.
php artisan vendor:publish --tag=stubs bearbeiten Nutzer die Datei stubs/handler.stub im Projekt-Root und passen so die Vorlage an.
Registrierung im Service Provider
Registrieren Sie den Befehl in derboot()-Methode Ihres Service Providers. Mit runningInConsole() verhindern Sie unnötiges Laden bei Web-Requests.
extra.laravel in der composer.json Ihres Pakets müssen Nutzer den Provider nicht selbst registrieren.
Anwendungsbeispiele
WoGeneratorCommand glänzt:
Form-Request-Erweiterung
Form-Request-Erweiterung
Ein Befehl, der Requests erzeugt, die von einer eigenen Basisklasse mit Auth-Prüfung und eigener Validierung erben.
getDefaultNamespace() liefert App\Http\Requests.DTO-Generator
DTO-Generator
Ein Befehl, der Boilerplate für Data Transfer Objects erzeugt. Der Stub enthält readonly-Properties und eine
from()-Factory-Methode.Action-Klasse
Action-Klasse
Ein Befehl, der Action-Klassen mit einer einzigen Verantwortlichkeit erzeugt. Er legt Klassen mit
execute()-Methode im Namensraum App\Actions an.Livewire nutzt denselben Mechanismus
Livewire nutzt denselben Mechanismus
Der Befehl
make:livewire ist als MakeCommand-Klasse implementiert, die von GeneratorCommand erbt. Um sowohl Komponentenklasse als auch Blade-View zu erzeugen, überschreibt sie handle().Tests
Mit Orchestra Testbench testen Sie, dass Ihr Befehl die Dateien korrekt erzeugt.Verwandte Seiten
Laravel-Paketentwicklung
Grundlagen der Paketentwicklung mit Service Providern.
Laravel-Pakete mit Orchestra Testbench testen
Wie Sie die Grundlagen für Pakettests schaffen.