首页 > 解决方案 > 无法通过传递的输入深度扩展 Laravel Artisan Command

问题描述

试图创建一个基本命令,然后扩展它。提供给扩展命令的输入不会使其沿树向下。

BaseApiClassBuilder.php

use Illuminate\Console\Command;

class BaseApiClassBuilder extends Command
{
    // rest of class follows...
}

MakeApiCollection.php

class MakeApiCollection extends BaseApiClassBuilder
{

    protected $signature = 'make:apicollection {name} {--namespace=}';

    protected $description = 'Make an API Collection/Resource';

    // guts of class...
}

我正在运行的控制台命令

artisan make:apicollection testApiCollection

收到控制台错误:

“App\Console\Commands\BaseApiClassMaker”中定义的命令名称不能为空。

与Can you extend Command classes in Laravel类似的问题,但这个问题有点过时,不太具体,也没有答案。

该错误仅在我扩展基本命令而不是“命令”时发生。

我已经确定在构造函数中没有调用验证,实际上很难弄清楚输入在哪里被验证,以及为什么它没有一直保持下去。

毫无疑问,我正在做一些愚蠢的事情,并且有一个简单的解决方案......但我找不到它!

我任何人都可以帮助我更好地理解这一点,非常感谢收到评论/答案/反馈。如果我以完全错误的方式接近这个,也请告诉我。我确实注意到我可以扩展GeneratorCommand它有许多我需要的助手,但似乎并没有解决这个问题。

标签: phplaravellaravel-5

解决方案


通过使父类抽象,您不需要定义signature

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

abstract class BaseCommand extends Command
{
    ...
}

稍后在子类中,您signature根据需要 设置

class ChildCommand extends BaseCommand
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'make:apicollection {specific-name} {--namespace=}';

推荐阅读