Skip to main content

Qu’est-ce que GeneratorCommand

Illuminate\Console\GeneratorCommand est la classe abstraite qui sert de base à toutes les commandes de génération de code de Laravel. make:model, make:controller, make:request, etc. héritent tous de cette classe. Lorsque vous proposez une commande make:xxx personnalisée dans votre package, il suffit à l’utilisateur d’exécuter par exemple php artisan make:handler OrderHandler au lieu de créer la classe manuellement, et un fichier avec le namespace correct est généré.
GeneratorCommand n’est presque pas documenté officiellement : il faut lire directement le code source du framework pour le comprendre. C’est un sujet avancé typique.

Implémentation minimale

Dans une classe qui hérite de GeneratorCommand, seule la méthode getStub() est obligatoire. Les autres propriétés sont facultatives, mais en pratique on définit généralement les éléments suivants. Voici un exemple d’implémentation de la commande make:handler.
Lorsque getDefaultNamespace() est configuré ainsi, exécuter php artisan make:handler OrderHandler génère la classe App\Handlers\OrderHandler dans app/Handlers/OrderHandler.php.

Créer le fichier stub

Placez le fichier stub au chemin renvoyé par getStub(). Un stub est un fichier PHP servant de modèle ; ses espaces réservés sont remplacés par le namespace et le nom de la classe.
src
Console
Commands
HandlerMakeCommand.php
stubs
handler.stub
Exemple de fichier stub :
handler.stub
GeneratorCommand remplace automatiquement les espaces réservés suivants dans le stub. {{ namespace }} et DummyNamespace produisent le même résultat. Les stubs intégrés à Laravel incluaient les deux formes, mais pour toute nouvelle création, la forme {{ namespace }} est recommandée.

Permettre la personnalisation des stubs

Pour offrir un mécanisme permettant aux utilisateurs de remplacer les stubs, utilisez le pattern resolveStubPath(). Publiez d’abord les stubs dans le boot() du service provider.
Ensuite, dans getStub(), donnez la priorité au stub personnalisé par l’utilisateur.
Un utilisateur qui exécute php artisan vendor:publish --tag=stubs peut alors éditer stubs/handler.stub à la racine du projet pour modifier le modèle.
resolveStubPath() est également le pattern utilisé par RequestMakeCommand intégré à Laravel. Si vous publiez un package, adoptez ce pattern.

Enregistrement dans le service provider

Enregistrez la commande dans la méthode boot() du service provider. En vérifiant runningInConsole(), vous évitez tout chargement inutile lors des requêtes web.
En configurant extra.laravel dans le composer.json du package, vous évitez à l’utilisateur d’avoir à enregistrer le service provider manuellement.

Cas d’utilisation

Voici quelques cas d’usage où GeneratorCommand fait briller ses atouts.
Une commande qui génère des Request héritant d’une classe de base propre incluant des vérifications d’authentification ou une logique de validation personnalisée. getDefaultNamespace() renvoie App\Http\Requests.
Une commande qui génère le boilerplate d’un Data Transfer Object. Prévoyez un stub avec des propriétés readonly et une méthode factory from().
Une commande qui génère des classes Action à responsabilité unique. Elle crée dans le namespace App\Actions des classes dotées d’une méthode execute().
La commande make:livewire est implémentée dans la classe MakeCommand qui hérite de GeneratorCommand. Elle surcharge handle() pour générer simultanément la classe du composant et la vue Blade.

Tests

Utilisez Orchestra Testbench pour vérifier que la commande génère correctement les fichiers.
Les commandes Generator écrivent sur le système de fichiers réel. Nettoyez impérativement dans tearDown(). Cela garantit l’exécution du nettoyage même si le test échoue en cours de route.

Pages associées

Développement de packages Laravel

Découvrez les bases du développement de packages avec les service providers.

Tester des packages Laravel avec Orchestra Testbench

Découvrez comment mettre en place l’infrastructure de test d’un package.
Dernière modification le 13 juillet 2026