В настоящее время я работаю над компонентом 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.