You are here

public function Command::run in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/console/Command/Command.php \Symfony\Component\Console\Command\Command::run()

Runs the command.

The code to execute is either defined directly with the setCode() method or by overriding the execute() method in a sub-class.

Parameters

InputInterface $input An InputInterface instance:

OutputInterface $output An OutputInterface instance:

Return value

int The command exit code

Throws

\Exception

See also

setCode()

execute()

File

vendor/symfony/console/Command/Command.php, line 210

Class

Command
Base class for all commands.

Namespace

Symfony\Component\Console\Command

Code

public function run(InputInterface $input, OutputInterface $output) {

  // force the creation of the synopsis before the merge with the app definition
  $this
    ->getSynopsis(true);
  $this
    ->getSynopsis(false);

  // add the application arguments and options
  $this
    ->mergeApplicationDefinition();

  // bind the input against the command specific arguments/options
  try {
    $input
      ->bind($this->definition);
  } catch (\Exception $e) {
    if (!$this->ignoreValidationErrors) {
      throw $e;
    }
  }
  $this
    ->initialize($input, $output);
  if (null !== $this->processTitle) {
    if (function_exists('cli_set_process_title')) {
      cli_set_process_title($this->processTitle);
    }
    elseif (function_exists('setproctitle')) {
      setproctitle($this->processTitle);
    }
    elseif (OutputInterface::VERBOSITY_VERY_VERBOSE === $output
      ->getVerbosity()) {
      $output
        ->writeln('<comment>Install the proctitle PECL to be able to change the process title.</comment>');
    }
  }
  if ($input
    ->isInteractive()) {
    $this
      ->interact($input, $output);
  }

  // The command name argument is often omitted when a command is executed directly with its run() method.
  // It would fail the validation if we didn't make sure the command argument is present,
  // since it's required by the application.
  if ($input
    ->hasArgument('command') && null === $input
    ->getArgument('command')) {
    $input
      ->setArgument('command', $this
      ->getName());
  }
  $input
    ->validate();
  if ($this->code) {
    $statusCode = call_user_func($this->code, $input, $output);
  }
  else {
    $statusCode = $this
      ->execute($input, $output);
  }
  return is_numeric($statusCode) ? (int) $statusCode : 0;
}