Laravel 自定义 artisan 命令未列出

Laravel custom artisan command not listed

我写了几个 artisan 命令。
它们都有共同的功能,所以我没有扩展 Command class,而是写了一个 MyBaseCommand class 所以所有的命令都扩展了这个:

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

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

    protected $description = 'Some description';

    :
    :

和基础class:

namespace App\Console\Commands;

class MyBaseCommand extends Command
{
    :
    :

问题是由于某些原因这些命令不再与 php artisan 一起列出。

知道如何强制 laravel 也列出这些命令吗?

protected $signature = 'mycommands:command1'; //this is your command name

打开 app\Console\kernel.php 文件。

protected $commands = [
    \App\Console\Commands\SomeCommand::class,
]

然后 运行

php artisan list

Laravel 尝试自动为您注册命令:

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

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

您可以在 App\Console\Kernel.php

中找到它

确保您的 类 有 signaturedescription 属性。

这很愚蠢,无论如何,因为它可能发生在其他人身上我把答案留在这里:

我想隐藏基数 class,所以我在里面放了这行:

protected $hidden = true;

当然,这个变量的值被传播到高层 class,是什么隐藏了自定义命令。

解决方案就是在这些文件中添加以下行:

protected $hidden = false;

======================更新======================

正如@aken-roberts 所提到的,更好的解决方案是简单地将基础 class 抽象化:

namespace App\Console\Commands;

abstract class MyBaseCommand extends Command
{

    abstract public function handle();

    :
    :

此时artisan没有列出,无法执行