Как передать параметр в команду Symfony?

В Symfony есть возможность передачи параметров в команду при ее вызове. Это позволяет динамически изменять поведение команды в зависимости от переданных параметров. Есть несколько способов передачи параметров в команду Symfony.

1. Передача параметров через аргументы командной строки. Это самый простой способ передачи параметров. Параметры передаются после имени команды в виде аргументов командной строки. Например:

php bin/console app:my-command argument1 argument2

В самой команде Symfony можно получить переданные аргументы с помощью объекта InputInterface. Пример:

protected function execute(InputInterface $input, OutputInterface $output)
{
    $argument1 = $input->getArgument('argument1');
    $argument2 = $input->getArgument('argument2');
    
    // Дальнейшая логика команды
}

2. Передача параметров через опции командной строки. Опции - это именованные аргументы, которые передаются после имени команды и начинаются с символа двойного дефиса (--). Например:

php bin/console app:my-command --option1=value1 --option2=value2

В команде Symfony опции могут быть определены с помощью метода configure(). Пример:

protected function configure()
{
    $this
        ->addOption('option1', null, InputOption::VALUE_REQUIRED, 'Description of option1')
        ->addOption('option2', null, InputOption::VALUE_REQUIRED, 'Description of option2');
}

protected function execute(InputInterface $input, OutputInterface $output)
{
    $option1 = $input->getOption('option1');
    $option2 = $input->getOption('option2');
    
    // Дальнейшая логика команды
}

3. Передача параметров через аргументы внутри команды. При вызове команды через код можно передать параметры с помощью метода execute() второго аргумента run():

use SymfonyBundleFrameworkBundleCommandContainerAwareCommand;
use SymfonyComponentConsoleInputInputInterface;
use SymfonyComponentConsoleOutputOutputInterface;

class MyCommand extends ContainerAwareCommand
{
    protected function configure()
    {
        $this->setName('app:my-command');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        // Параметры переданные через execute()
        $argument1 = $input->getArgument('argument1');
        $argument2 = $input->getArgument('argument2');
        
        // Дальнейшая логика команды
    }
}

$command = new MyCommand();
$command->run(new SymfonyComponentConsoleInputArrayInput([
    'command' => 'app:my-command',
    'argument1' => 'value1',
    'argument2' => 'value2',
]), new SymfonyComponentConsoleOutputConsoleOutput());

В данном примере параметры 'argument1' и 'argument2' передаются внутри массива второго аргумента метода run().