Как заменить команду справки в Symfony? - PullRequest
0 голосов
/ 04 января 2019

В настоящее время я работаю над компонентом Symfony Console для перестройки приложения CLI. Проблема заключается в замене команды help (или даже команды list) вручную.

Предположим, файл приложения (т.е. где вы запускаете приложение) находится в ./bin/console.php. Когда я бегу

php ./bin/console.php help

, это показывает мне полную помощь. Итак, я создал новый класс HelpCommand для обработки настроенного вывода и добавил его в приложение (т. Е. С помощью метода Symfony\Component\Console\Application::add()):

<?php

namespace App\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class HelpCommand extends Command
{
    protected function configure()
    {
        $this->setName('help');
        // ...
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $output->writeln("Worked!");
        return 0;
    }
}

После повторного запуска команды, вывод команды help изменился, и команда напечатала «Worked!».

Проблема в том, что я не могу использовать подсказки команд. Например, предположим, что я определил команду start, и я хочу знать ее использование; поэтому я бы побежал:

php ./bin/console.php start -h

Это приводит к фатальной ошибке, которая выглядит следующим образом:

PHP Fatal error:  Uncaught Error: Call to undefined method App\Command\HelpCommand::setCommand() in $ROOT/vendor/symfony/console/Application.php:507
Stack trace:
#0 $ROOT/vendor/symfony/console/Application.php(667): Symfony\Component\Console\Application->get('list')
#1 $ROOT/vendor/symfony/console/Application.php(226): Symfony\Component\Console\Application->find('list')
#2 $ROOT/vendor/symfony/console/Application.php(145): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#3 $ROOT/bin/console.php(22): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#4 {main}
  thrown in $ROOT/vendor/symfony/console/Application.php on line 507

Есть ли другие решения или исправления для этого? Кроме того, я беспокоюсь о будущих проблемах, о непредвиденных обстоятельствах, произошедших с этими изменениями в команде help.

Спасибо заранее. Обратите внимание, что я использую Composer.

...