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

@ -9,8 +9,10 @@ Yii Framework 2 Change Log
- Bug #17434: Fix regular expression illegal character; Repeated fix for Internet Explorer 11 AJAX redirect bug in case of 301 and 302 response codes (`XMLHttpRequest: Network Error 0x800c0008`) (kamarton)
- Bug #16855: Ignore console commands that have no actions (alexeevdv)
- Enh #16826: `appendTimestamp` support was added to `View` methods `registerCssFile()` and `registerJsFile()` (onmotion)
- Enh #15526: Show valid aliases and options on invalid input in console application (samdark)
- Bug #16671: Logging in `Connection::open()` was not respecting `Connection::$enableLogging` (samdark)
2.0.26 September 03, 2019
-------------------------

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);
}
}
}