Laravel 5.1 Artisan Command的正确语法

时间:2015-08-19 18:07:38

标签: php laravel-5.1 artisan

我试图为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

我在这里缺少什么?

1 个答案:

答案 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