public function run(Request $request = null) { if (null === $request) { $request = Request::createAuto(); } $this->request = $request; try { $this->reader = new RequestMapper(); $this->reader->read($request, $this->command->optionsArray()); } catch (Exception $exception) { $this->response->error($exception->getMessage()); return $this; } foreach ($this->reader->values as $name => $value) { $this->command->{$name} = $value; } $this->command->performAction(); return $this; }
public function run(Request $request = null) { if (null === $request) { $request = Request::createAuto(); } $this->request = $request; try { if (!$this->command instanceof Command\Application) { throw new Command\Exception('Application required', Command\Exception::INVALID_ARGUMENT); } $this->reader = new RequestReader(); $this->reader->read($request, $this->command->optionsArray()); } catch (Command\Exception $exception) { if (empty($this->reader->values['action'])) { // TODO symbolize 'action' literal $this->response->error($exception->getMessage()); $this->response->addContent('Use --help to show information.'); return $this; } } foreach ($this->reader->values as $name => $value) { $this->command->{$name} = $value; } if (isset($this->command->action)) { $action = $this->command->action; $commandDefinition = $this->command->definition()->actions[$action]; $command = new $commandDefinition->commandClass(); $runner = new \Yaoi\Cli\Command\Runner($command); $runner->commandName = $this->commandName . ' ' . $action; $runner->commandVersion = $this->commandVersion; $runner->commandDescription = $this->commandDescription . ($runner->commandDescription ? PHP_EOL . $runner->commandDescription : ''); $runner->skipFirstTokens = 1; $runner->run($request); } return $this; }