1
votes

Commande artisanale personnalisée Laravel non répertoriée

J'ai plusieurs commandes artisanales que j'ai écrites.
Tous partagent des fonctionnalités communes, donc au lieu d'étendre la classe Command , j'ai écrit une classe MyBaseCommand afin que toutes les commandes étendent celle-ci:

namespace App\Console\Commands;

class MyBaseCommand extends Command
{
    :
    :

Et la classe de base:

namespace App\Console\Commands;
use Illuminate\Console\Command;

class SomeCommand extends MyBaseCommand
{
    protected $signature = 'mycommands:command1';

    protected $description = 'Some description';

    :
    :

Le problème est que, pour une raison quelconque, ces commandes ne sont plus répertoriées avec php artisan .

Une idée comment puis-je forcer laravel à lister ces commandes également?


5 commentaires

MyBaseCommand étend-il la classe de base Command de Laravel?


Pouvez-vous publier un exemple de code pour la classe de base et l'un de ses enfants? À quoi ressemblent également vos signatures? Vos commandes sont-elles également enregistrées dans la méthode commands ou dans la propriété commands?


@ aken-roberts, oui - je viens de mettre à jour la question.


@superkevin, je n'ai enregistré mes cours à aucun endroit. Cependant, lorsqu'ils étendaient directement la classe Command , ils étaient répertoriés.


@guyaloni vous devez enregistrer toutes vos classes de commandes enfants dans le kernel.php même si vous étendez votre classe de commandes de base. Laravel vérifie ce fichier afin de lister toutes les commandes personnalisées.


3 Réponses :


3
votes
php artisan list

1 commentaires

Cela ne fonctionne pas, à moins que j'étende les classes directement depuis Command (et que je n'ai pas besoin de les lister)



0
votes

Laravel essaie d'enregistrer automatiquement les commandes pour vous avec:

/**
 * Register the commands for the application.
 *
 * @return void
 */
protected function commands()
{
    $this->load(__DIR__.'/Commands');

    require base_path('routes/console.php');
}

Vous pouvez trouver ceci dans App\Console\Kernel.php

Assurez-vous que vos classes ont une propriété signature et description .

 entrez la description de l'image ici p >

 entrez la description de l'image ici


3 commentaires

Il semble qu'il vous manque use Illuminate \ Console \ Command; dans la classe parente et que vous en avez dans la classe enfant @guyaloni


Autant que je sache, ce n'est pas nécessaire (PhpStorm dit également qu'il n'est jamais utilisé si je l'ajoute). Quoi qu'il en soit, même lorsque je l'ajoute, je ne le vois pas dans la liste.


@guyaloni Si laravel ne le récupère pas en lisant le dossier, vous devrez l'enregistrer en le définissant dans le tableau $ commands .



0
votes

C'est assez stupide, de toute façon puisque cela pourrait arriver à quelqu'un d'autre je laisse ici la réponse:

Je voulais cacher la classe de base, donc j'avais à l'intérieur cette ligne:

namespace App\Console\Commands;

abstract class MyBaseCommand extends Command
{

    abstract public function handle();

    :
    :


1 commentaires

Rendez votre classe MyBaseCommand abstraite, et elle ne s'enregistrera pas comme commande.