Я делаю тестовое CLI-приложение с Symfony 4 и мне интересно, возможно ли создать один ClassCommand для нескольких целей?!
Например, мое тестовое клиентское приложение имеет несколько действий / команд, но они очень похожи. Я не люблю дублировать код (также DRY-рекомендации никто не отменял), поэтому я подумал, что было бы лучше иметь одну команду, но в зависимости от ее имени выбрать, какой алгоритм использовать. Например. имя команды user: manager выполнит один набор инструкций, а user: designer - другой, и все это в одной ClassCommand.
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class UserCommand extends Command
{
// some properties
protected function configure()
{
$this
->setName('user:somebody')
// and other stuff
}
protected function execute(InputInterface $input, OutputInterface $output)
{
// output code here
}
}
Для других команд сейчас я должен создать еще одну ClassCommand. Хорошо, я могу расширить его из UserCommand, но мне все еще нужно указать методы "configure" и "execute" (если он должен быть переопределен). Слишком много лишнего кода, не так ли?
На данный момент я не знаю, как сделать то, что я хочу.
Возвращаясь к вопросу: возможно ли сделать имя команды динамическим?