Cake\Console\Shell::runCommand PHP Method

runCommand() public method

Delegates calls to Tasks and resolves methods inside the class. Commands are looked up with the following order: - Method on the shell. - Matching task name. - main() method. If a shell implements a main() method, all missing method calls will be sent to main() with the original method name in the argv. For tasks to be invoked they *must* be exposed as subcommands. If you define any subcommands, you must define all the subcommands your shell needs, whether they be methods on this class or methods on tasks.
public runCommand ( array $argv, boolean $autoMethod = false, array $extra = [] ) : integer | boolean | null
$argv array Array of arguments to run the shell with. This array should be missing the shell name.
$autoMethod boolean Set to true to allow any public method to be called even if it was not defined as a subcommand. This is used by ShellDispatcher to make building simple shells easy.
$extra array Extra parameters that you can manually pass to the Shell to be dispatched. Built-in extra parameter is : - `requested` : if used, will prevent the Shell welcome message to be displayed
return integer | boolean | null
    public function runCommand($argv, $autoMethod = false, $extra = [])
    {
        $command = isset($argv[0]) ? $argv[0] : null;
        $this->OptionParser = $this->getOptionParser();
        try {
            list($this->params, $this->args) = $this->OptionParser->parse($argv);
        } catch (ConsoleException $e) {
            $this->err('Error: ' . $e->getMessage());
            $this->out($this->OptionParser->help($command));
            return false;
        }
        if (!empty($extra) && is_array($extra)) {
            $this->params = array_merge($this->params, $extra);
        }
        $this->_setOutputLevel();
        if (!empty($this->params['plugin'])) {
            Plugin::load($this->params['plugin']);
        }
        $this->command = $command;
        if (!empty($this->params['help'])) {
            return $this->_displayHelp($command);
        }
        $subcommands = $this->OptionParser->subcommands();
        $method = Inflector::camelize($command);
        $isMethod = $this->hasMethod($method);
        if ($isMethod && $autoMethod && count($subcommands) === 0) {
            array_shift($this->args);
            $this->startup();
            return call_user_func_array([$this, $method], $this->args);
        }
        if ($isMethod && isset($subcommands[$command])) {
            $this->startup();
            return call_user_func_array([$this, $method], $this->args);
        }
        if ($this->hasTask($command) && isset($subcommands[$command])) {
            $this->startup();
            array_shift($argv);
            return $this->{$method}->runCommand($argv, false, ['requested' => true]);
        }
        if ($this->hasMethod('main')) {
            $this->command = 'main';
            $this->startup();
            return call_user_func_array([$this, 'main'], $this->args);
        }
        $this->out($this->OptionParser->help($command));
        return false;
    }

Usage Example

Beispiel #1
5
 /**
  * Override the default behavior to save the command called
  * in order to pass it to the command dispatcher
  *
  * {@inheritDoc}
  */
 public function runCommand($argv, $autoMethod = false, $extra = [])
 {
     array_unshift($argv, 'migrations');
     $this->argv = $argv;
     return parent::runCommand($argv, $autoMethod, $extra);
 }