Laravel自定义工匠命令未列出

时间:2019-04-30 16:24:08

标签: laravel artisan

我写了几个工匠命令。
它们全部共享通用功能,因此我没有扩展Command类,而是编写了MyBaseCommand类,因此所有命令都扩展了该类:

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

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

    protected $description = 'Some description';

    :
    :

和基类:

namespace App\Console\Commands;

class MyBaseCommand extends Command
{
    :
    :

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

有什么主意我也可以强制laravel列出这些命令吗?

3 个答案:

答案 0 :(得分:3)

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

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

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

然后运行

php artisan list

答案 1 :(得分:0)

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属性。

enter image description here

enter image description here

答案 2 :(得分:0)

这是非常愚蠢的,因为它可能发生在其他人身上,我在这里留下答案:

我想隐藏基类,所以我在其中包含了这一行:

protected $hidden = true;

当然,此变量的值传播到了高级类,这使自定义命令隐藏了。

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

protected $hidden = false;

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

就像@ aken-roberts提到的那样,更好的解决方案是简单地将基类抽象化:

namespace App\Console\Commands;

abstract class MyBaseCommand extends Command
{

    abstract public function handle();

    :
    :

在这种情况下,工匠没有列出它,因此无法执行。