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
中找到它
确保您的 类 有 signature
和 description
属性。
这很愚蠢,无论如何,因为它可能发生在其他人身上我把答案留在这里:
我想隐藏基数 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没有列出,无法执行
我写了几个 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
确保您的 类 有 signature
和 description
属性。
这很愚蠢,无论如何,因为它可能发生在其他人身上我把答案留在这里:
我想隐藏基数 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没有列出,无法执行