From e7e72e2ff67b32e00e34b6d13f1f479526a765c3 Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Wed, 18 Sep 2019 01:33:43 +0300 Subject: [PATCH] Fix #15526: Show valid aliases and options on invalid input in console application --- framework/CHANGELOG.md | 2 ++ framework/console/Controller.php | 20 ++++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index e3f760bd96..ad0a9a68c5 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -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 ------------------------- diff --git a/framework/console/Controller.php b/framework/console/Controller.php index 02b7009fc1..f47a4f3c53 100644 --- a/framework/console/Controller.php +++ b/framework/console/Controller.php @@ -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); } } }