我试图为Laravel 5.1制作一个工匠指令,而且我甚至无法使最基本的版本工作。
采取的步骤
1)php artisan make:console Zelda --command=zelda
2)在app/Console/Command/Zelda.php
中创建的文件包含以下内容
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class Zelda extends Command
{
protected $signature = 'zelda';
protected $description = 'Command description.';
public function __construct() {
parent::__construct();
}
public function handle() {}
}
3)composer.json中的自动加载器看起来像这样
"autoload": {
"classmap": [
"database",
"app/Console/Commands"
],
"psr-4": {
"App\\": "app/"
}
},
"autoload-dev": {
"classmap": [
"tests/TestCase.php"
]
},
4)然后我运行php artisan list
而没有zelda
我在这里缺少什么?
答案 0 :(得分:5)
你快到了!您已经完成了创建命令类所需的一切。但是,您仍然需要告诉应用程序应该使用此命令类。
也就是说,在CLI应用程序内核文件(而不是Web应用程序的内核)文件中,您应该看到以下内容
#File: app/Console/Kernel.php
class Kernel extends ConsoleKernel
{
//...
protected $commands = [
\App\Console\Commands\Inspire::class,
];
//...
}
一旦你创建了你的命令(手动或通过make:console
,你仍然需要将新的命令类(完整的PHP类名)添加到内核文件的$commands
数组中。 / p>
此
protected $commands = [
\App\Console\Commands\Inspire::class,
'\App\Console\Commands\Zelda',
];
或者
protected $commands = [
\App\Console\Commands\Inspire::class,
\App\Console\Commands\Zelda::class,
];
应该让你到达你需要的位置(我不确定为什么Laravel 5.1的核心代码在这里使用魔法常量class
)