Skip to main content

Wat is GeneratorCommand

Illuminate\Console\GeneratorCommand is de abstracte basisklasse voor alle codegeneratiecommando’s van Laravel. make:model, make:controller, make:request en dergelijke extenden allemaal deze klasse. Als je pakket een eigen make:xxx commando aanbiedt, hoeven gebruikers klassen niet meer handmatig aan te maken: ze voeren gewoon iets als php artisan make:handler OrderHandler uit en er wordt een bestand met de juiste namespace gegenereerd.
GeneratorCommand staat nauwelijks in de officiële documentatie; je begrijpt hem pas als je de broncode van het framework zelf leest. Een typisch gevorderd onderwerp.

Minimale implementatie

Een klasse die GeneratorCommand extendt, hoeft alleen de methode getStub() te implementeren. De overige properties zijn optioneel, maar in de praktijk stel je het volgende in. Hier een voorbeeld van de implementatie van een make:handler commando.
Met getDefaultNamespace() ingesteld wordt bij het uitvoeren van php artisan make:handler OrderHandler de klasse App\Handlers\OrderHandler gegenereerd in app/Handlers/OrderHandler.php.

Een stub-bestand maken

Plaats een stub-bestand op het pad dat getStub() teruggeeft. Een stub is een PHP-bestand dat als template dient; de placeholders worden vervangen door de namespace en de klassenaam.
src
Console
Commands
HandlerMakeCommand.php
stubs
handler.stub
Voorbeeld van een stub-bestand:
handler.stub
GeneratorCommand vervangt automatisch de volgende placeholders in de stub. {{ namespace }} en DummyNamespace geven allebei hetzelfde resultaat. De ingebouwde stubs van Laravel bevatten beide vormen, maar voor nieuwe stubs wordt de vorm {{ namespace }} aanbevolen.

Aanpasbare stubs mogelijk maken

Om gebruikers de mogelijkheid te geven stubs te overschrijven, gebruik je het resolveStubPath()-patroon. Publiceer eerst de stubs in de boot() van je service provider.
Laat vervolgens getStub() voorrang geven aan de door de gebruiker aangepaste stub.
Gebruikers die php artisan vendor:publish --tag=stubs uitvoeren, kunnen de template aanpassen door stubs/handler.stub in de projectroot te bewerken.
resolveStubPath() is een patroon dat ook in Laravels ingebouwde RequestMakeCommand wordt gebruikt. Neem dit patroon over als je een pakket publiceert.

Registreren in de service provider

Commando’s registreer je in de boot()-methode van de service provider. Door te controleren met runningInConsole() voorkom je onnodig laden bij webrequests.
Als je extra.laravel instelt in de composer.json van je pakket, hoeven gebruikers de service provider niet handmatig te registreren.

Toepassingen

Enkele use cases waarin GeneratorCommand goed van pas komt.
Een commando dat Requests genereert die extenden van een eigen basisklasse met authenticatiechecks of aangepaste validatielogica. Laat getDefaultNamespace() App\Http\Requests teruggeven.
Een commando dat de boilerplate voor Data Transfer Objects genereert. Voorzie een stub met readonly properties en een from()-factorymethode.
Een commando dat Action-klassen met één verantwoordelijkheid genereert. Genereert klassen met een execute()-methode in de namespace App\Actions.
Het commando make:livewire is geïmplementeerd in de klasse MakeCommand, die GeneratorCommand extendt. Om tegelijk twee bestanden te genereren — een componentklasse en een Blade-view — wordt handle() overschreven.

Testen

Met Orchestra Testbench test je dat het commando de bestanden correct genereert.
Generatorcommando’s schrijven naar het echte bestandssysteem. Ruim altijd op in tearDown(). Die wordt ook betrouwbaar uitgevoerd als een test halverwege faalt.

Gerelateerde pagina’s

Laravel-pakketontwikkeling

Bekijk de basis van pakketontwikkeling met service providers.

Laravel-pakketten testen met Orchestra Testbench

Bekijk hoe je een basis opzet voor het testen van pakketten.
Laatst gewijzigd op 6 september 2026