Laravel 5.1 Artisan 命令的正确语法

Proper syntax for Laravel 5.1 Artisan Command

我正在尝试为 Laravel 5.1 创建一个 artisan 命令,但我什至无法使用最基本的版本。

已走步数

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 没有塞尔达

我在这里错过了什么?

你就快完成了!您已经完成了 创建 命令 class 所需的所有操作。但是,您仍然需要告诉您的应用程序它应该 使用 这个命令 class。

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

#File: app/Console/Kernel.php
class Kernel extends ConsoleKernel
{
    //...    
    protected $commands = [
        \App\Console\Commands\Inspire::class,
    ];
    //...
}

创建命令后(手动或通过 make:console,您仍然需要添加新命令 class(完整的 PHP class 名称)到内核​​文件的 $commands 数组。

这个

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