Метод run класса Command
Метод run класса Command запускает
консольную команду и управляет всем её жизненным
циклом. Первым параметром передаётся объект
InputInterface, вторым - объект
OutputInterface. Метод последовательно
вызывает initialize, interact
и execute, возвращая код завершения команды.
Синтаксис
public function run(InputInterface $input, OutputInterface $output): int
Пример
Давайте создадим команду и запустим её через метод run:
<?php
namespace AppCommand;
use SymfonyComponentConsoleCommandCommand;
use SymfonyComponentConsoleInputInputInterface;
use SymfonyComponentConsoleOutputOutputInterface;
class ArticleCommand extends Command
{
protected static $defaultName = 'app:article';
protected function execute(InputInterface $input, OutputInterface $output): int
{
$output->writeln('hello');
return Command::SUCCESS;
}
}
?>
Запустим команду через метод run:
<?php
namespace AppCommand;
use SymfonyComponentConsoleApplication;
use SymfonyComponentConsoleInputArrayInput;
use SymfonyComponentConsoleOutputBufferedOutput;
$application = new Application();
$command = new ArticleCommand();
$command->setApplication($application);
$input = new ArrayInput([]);
$output = new BufferedOutput();
$res = $command->run($input, $output);
echo $output->fetch();
?>
Результат выполнения кода:
hello
Пример
Давайте передадим аргумент в команду и получим код завершения:
<?php
namespace AppCommand;
use SymfonyComponentConsoleCommandCommand;
use SymfonyComponentConsoleInputInputArgument;
use SymfonyComponentConsoleInputInputInterface;
use SymfonyComponentConsoleOutputOutputInterface;
class UserCommand extends Command
{
protected static $defaultName = 'app:user';
protected function configure(): void
{
$this->addArgument('name', InputArgument::REQUIRED);
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$name = $input->getArgument('name');
$output->writeln('user ' . $name);
return Command::SUCCESS;
}
}
?>
Запустим команду с аргументом 'abcde':
<?php
namespace AppCommand;
use SymfonyComponentConsoleApplication;
use SymfonyComponentConsoleInputArrayInput;
use SymfonyComponentConsoleOutputBufferedOutput;
$application = new Application();
$command = new UserCommand();
$command->setApplication($application);
$input = new ArrayInput(['name' => 'abcde']);
$output = new BufferedOutput();
$res = $command->run($input, $output);
echo $output->fetch();
echo $res;
?>
Результат выполнения кода:
user abcde
0