尝试创建基本命令,然后扩展它。提供给扩展命令的输入不会使它陷入困境。
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类似的问题,但是这个问题有点过时,不够具体,也没有答案。
仅当我扩展基本命令而不是“ command”时才会发生错误。
我已经确定在构造函数中未调用验证,弄清楚输入在哪里进行验证以及为什么没有完全验证输入实际上是非常棘手的。
毫无疑问,我正在做一些愚蠢的事情,并且有一个简单的解决方案……但是我找不到它!
任何人都可以帮助我更好地理解这一点,非常感激收到的评论/答案/反馈。如果我完全以错误的方式处理此问题,也请告诉我。我确实注意到我可以扩展GeneratorCommand
来代替它,它具有我需要的许多帮助程序,但似乎并不能解决这个问题。
答案 0 :(得分:3)
通过将父类抽象化,您无需定义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=}';