【问题标题】:Proper syntax for Laravel 5.1 Artisan CommandLaravel 5.1 Artisan 命令的正确语法
【发布时间】:2015-11-13 04:08:59
【问题描述】:

我正在尝试为 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 并且没有塞尔达

我在这里错过了什么?

【问题讨论】:

  • 另外...我做了一个 composer autoload dump --optimize

标签: php laravel-5.1 laravel-artisan


【解决方案1】:

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

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

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

一旦您创建了命令(手动或通过make:console,您仍然需要将新命令类(完整的 PHP 类名称)添加到内核文件的 $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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-06
    • 2015-12-24
    • 2015-12-07
    • 2016-02-07
    • 1970-01-01
    • 2014-04-19
    • 2017-01-18
    • 2020-03-17
    相关资源
    最近更新 更多