php - 无法通过传递的输入深度扩展 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
它有许多我需要的助手,但似乎并没有解决这个问题。
解决方案
通过使父类抽象,您不需要定义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=}';
推荐阅读
- javascript - 创建自定义控件并关联到 HTML 元素
- apache-kafka - Kafka Consumer 多租户
- amazon-web-services - Glue 虚拟视图(已创建 terraform)未出现在 Athena 中
- json - 如何将数据从 JSON 放入标签
- acumatica - 处理多张发票并将它们全部显示在一个报告中,例如打印发票/备忘录报告在 Acumatica 中的工作方式
- python - 通过字符串索引以获取数字出现后的所有字母
- ajax - jsf中带有ajax valueChange事件的表单字段的部分呈现
- objective-c - UIDragInteraction / UIDropItem 获取预览帧
- excel - 矩阵表中的匹配和条件格式
- stripe-payments - 在客户端上为服务器上的多次收费创建 PaymentMethod 时如何处理 Stripe 3D Secure