The command arguments */ private Arrayy $commandArguments; /** * @param string|class-string|Command $commandName The new command name * @param null|Arrayy $commandArguments The command new arguments */ public function __construct (string|Command $commandName, ?Arrayy $commandArguments = null) { $this->setCommandName($commandName); $this->setCommandArguments($commandArguments ?? new Arrayy()); } /** * Generate the input for the command call * * @return InputInterface Generate the input for the command call */ public function generateInput (): InputInterface { return new ArrayInput( (clone $this->getCommandArguments()) ->prepend($this->getCommandName(), 'command') ->toArray() ); } /** * Run the command * * @param Application $app The application * @param OutputInterface $output The output * * @return int The command return code * * @throws Throwable If an error occurs */ public function run (Application $app, OutputInterface $output): int { return $app->doRun($this->generateInput(), $output); } /** * The command name * * @return string The command name */ public function getCommandName (): string { return $this->commandName; } /** * Set the command name * * @param string|class-string|Command $commandName The new command name * * @return $this */ public function setCommandName (string|Command $commandName): self { if ($commandName instanceof Command) { $this->commandName = CliHelper::getCommandNameFromClass($commandName->getApplication(), $commandName::class); } elseif (class_exists($commandName)) { $this->commandName = CliHelper::getCommandNameFromClass($commandName->getApplication(), $commandName); } else { $this->commandName = $commandName; } return $this; } /** * The command arguments * * @return Arrayy The command arguments */ public function getCommandArguments (): Arrayy { return $this->commandArguments; } /** * Set the command arguments * * @param Arrayy $commandArguments The command new arguments * * @return $this */ public function setCommandArguments (Arrayy $commandArguments): self { $this->commandArguments = $commandArguments; return $this; } }