Невозможно глубоко расширить команду Laravel Artisan с помощью ввода - PullRequest
2 голосов
/ 18 апреля 2019

Попытка создать базовую команду, а затем расширить ее.Входные данные, предоставленные для команды расширения, не преобразуют его в дерево.

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» не может иметь пустое имя.

Подобный вопрос к Можете ли вы расширить классы команд в Laravel , но это немного устарело именее конкретный, а также без ответа.

Ошибка возникает только тогда, когда я расширяю свою базовую команду вместо 'command'.

Я определил, что проверка не вызывается в конструкторена самом деле довольно сложно выяснить, где проверяется ввод и почему он не проходит весь путь вниз.

Без сомнения, я делаю что-то глупое, и есть простое решение ...но я не могу найти его!

Я могу помочь любому понятьЛучше, с благодарностью получили комментарии / ответы / отзывы.Если я подхожу к этому совершенно неправильно, дайте мне знать тоже.Я заметил, что мог бы вместо этого расширить GeneratorCommand, в котором есть много нужных мне помощников, но, похоже, эта проблема не решается.

1 Ответ

4 голосов
/ 18 апреля 2019

Делая родительский класс абстрактным, вам не нужно определять 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=}';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...