Laravel 5.1 Artisan Command的正确语法

jea*_*_re 3 php artisan laravel-5.1

我正在尝试为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() {}
}
Run Code Online (Sandbox Code Playgroud)

3)composer.json中的自动加载器看起来像这样

"autoload": {
        "classmap": [
            "database",
            "app/Console/Commands"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
"autoload-dev": {
        "classmap": [
            "tests/TestCase.php"
        ]
},
Run Code Online (Sandbox Code Playgroud)

4)然后我跑php artisan list,没有塞尔达

我在这里错过了什么?

Ala*_*orm 5

你快到了!您已经完成了创建命令类所需的一切.但是,您仍然需要告诉应用程序它应该使用此命令类.

也就是说,在CLI应用程序内核文件(而不是Web应用程序的内核)文件中,您应该看到以下内容

#File: app/Console/Kernel.php
class Kernel extends ConsoleKernel
{
    //...    
    protected $commands = [
        \App\Console\Commands\Inspire::class,
    ];
    //...
}
Run Code Online (Sandbox Code Playgroud)

一旦创建了命令(手动或通过make:console,您仍然需要将新的命令类(完整的PHP类名)添加到$commands内核文件的数组中.

这个

protected $commands = [
    \App\Console\Commands\Inspire::class,
    '\App\Console\Commands\Zelda',
];
Run Code Online (Sandbox Code Playgroud)

或这个

protected $commands = [
    \App\Console\Commands\Inspire::class,
    \App\Console\Commands\Zelda::class,
];
Run Code Online (Sandbox Code Playgroud)

应该让你到达你需要的地方(我不确定为什么Laravel 5.1的核心代码在class这里使用魔法常量)