public function runAction($id, $params = [])
{
if (!empty($params)) {
// populate options here so that they are available in beforeAction().
$options = $this->options($id === '' ? $this->defaultAction : $id);
if (isset($params['_aliases'])) {
$optionAliases = $this->optionAliases();
foreach ($params['_aliases'] as $name => $value) {
if (array_key_exists($name, $optionAliases)) {
$params[$optionAliases[$name]] = $value;
} else {
throw new Exception(Yii::t('yii', 'Unknown alias: -{name}', ['name' => $name]));
}
}
unset($params['_aliases']);
}
foreach ($params as $name => $value) {
if (in_array($name, $options, true)) {
$default = $this->{$name};
if (is_array($default)) {
$this->{$name} = preg_split('/\\s*,\\s*(?![^()]*\\))/', $value);
} elseif ($default !== null) {
settype($value, gettype($default));
$this->{$name} = $value;
} else {
$this->{$name} = $value;
}
$this->_passedOptions[] = $name;
unset($params[$name]);
} elseif (!is_int($name)) {
throw new Exception(Yii::t('yii', 'Unknown option: --{name}', ['name' => $name]));
}
}
}
if ($this->help) {
$route = $this->getUniqueId() . '/' . $id;
return Yii::$app->runAction('help', [$route]);
}
return parent::runAction($id, $params);
}