Fix #15526: Show valid aliases and options on invalid input in console application

This commit is contained in:
Alexander Makarov
2019-09-18 01:33:43 +03:00
committed by GitHub
parent 37d62c2509
commit e7e72e2ff6
2 changed files with 20 additions and 2 deletions

View File

@ -105,7 +105,18 @@ class Controller extends \yii\base\Controller
if (array_key_exists($name, $optionAliases)) {
$params[$optionAliases[$name]] = $value;
} else {
throw new Exception(Yii::t('yii', 'Unknown alias: -{name}', ['name' => $name]));
$message = Yii::t('yii', 'Unknown alias: -{name}', ['name' => $name]);
if (!empty($optionAliases)) {
$aliasesAvailable = [];
foreach ($optionAliases as $alias => $option) {
$aliasesAvailable[] = '-' . $alias . ' (--' . $option . ')';
}
$message .= '. ' . Yii::t('yii', 'Aliases available: {aliases}', [
'aliases' => implode(', ', $aliasesAvailable)
]);
}
throw new Exception($message);
}
}
unset($params['_aliases']);
@ -136,7 +147,12 @@ class Controller extends \yii\base\Controller
unset($params[$kebabName]);
}
} elseif (!is_int($name)) {
throw new Exception(Yii::t('yii', 'Unknown option: --{name}', ['name' => $name]));
$message = Yii::t('yii', 'Unknown option: --{name}', ['name' => $name]);
if (!empty($options)) {
$message .= '. ' . Yii::t('yii', 'Options available: {options}', ['options' => '--' . implode(', --', $options)]);
}
throw new Exception($message);
}
}
}