我写了几个工匠命令。
它们全部共享通用功能,因此我没有扩展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列出这些命令吗?
答案 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
请确保您的类具有signature
和description
属性。
答案 2 :(得分:0)
这是非常愚蠢的,因为它可能发生在其他人身上,我在这里留下答案:
我想隐藏基类,所以我在其中包含了这一行:
protected $hidden = true;
当然,此变量的值传播到了高级类,这使自定义命令隐藏了。
解决方案是将以下行添加到这些文件中:
protected $hidden = false;
======================更新==================== >
就像@ aken-roberts提到的那样,更好的解决方案是简单地将基类抽象化:
namespace App\Console\Commands;
abstract class MyBaseCommand extends Command
{
abstract public function handle();
:
:
在这种情况下,工匠没有列出它,因此无法执行。