From 2d7f048b747b8e487f1fbc5231c8699a7dc1738b Mon Sep 17 00:00:00 2001 From: Qiang Xue Date: Fri, 1 Feb 2013 19:28:38 -0500 Subject: [PATCH] Refactored usage error in console commands. --- framework/console/Application.php | 12 +++------ framework/console/BadUsageException.php | 33 +++++++++++++++++++++++ framework/console/Controller.php | 13 +++------ framework/console/controllers/HelpController.php | 34 +++++++++++------------- 4 files changed, 54 insertions(+), 38 deletions(-) create mode 100644 framework/console/BadUsageException.php diff --git a/framework/console/Application.php b/framework/console/Application.php index 237be05..47c3142 100644 --- a/framework/console/Application.php +++ b/framework/console/Application.php @@ -93,8 +93,7 @@ class Application extends \yii\base\Application if ($request->getIsConsoleRequest()) { return $this->runAction($request->route, $request->params); } else { - echo "Error: this script must be run from the command line."; - return 1; + throw new BadUsageException(\Yii::t('yii', 'this script must be run from the command line.')); } } @@ -106,14 +105,14 @@ class Application extends \yii\base\Application * @param string $route the route that specifies the action. * @param array $params the parameters to be passed to the action * @return integer the status code returned by the action execution. 0 means normal, and other values mean abnormal. + * @throws BadUsageException if the route is invalid */ public function runAction($route, $params = array()) { try { return parent::runAction($route, $params); } catch (InvalidRouteException $e) { - echo "Error: unknown command \"$route\".\n"; - return 1; + throw new BadUsageException(\Yii::t('yii', 'Unknown command "{command}".', array('{command}' => $route))); } } @@ -148,9 +147,4 @@ class Application extends \yii\base\Application ), )); } - - public function usageError($message) - { - - } } diff --git a/framework/console/BadUsageException.php b/framework/console/BadUsageException.php new file mode 100644 index 0000000..abf02b0 --- /dev/null +++ b/framework/console/BadUsageException.php @@ -0,0 +1,33 @@ + + * @since 2.0 + */ +class BadUsageException extends \yii\base\Exception +{ + /** + * @var boolean whether this exception is caused by end user's mistake (e.g. wrong URL) + */ + public $causedByUser = true; + + /** + * @return string the user-friendly name of this exception + */ + public function getName() + { + return \Yii::t('yii', 'Bad Usage'); + } +} + diff --git a/framework/console/Controller.php b/framework/console/Controller.php index 16968f2..0880c44 100644 --- a/framework/console/Controller.php +++ b/framework/console/Controller.php @@ -11,7 +11,6 @@ namespace yii\console; use Yii; use yii\base\Action; -use yii\base\InvalidRequestException; use yii\base\InvalidRouteException; /** @@ -70,16 +69,16 @@ class Controller extends \yii\base\Controller * @param Action $action the currently requested action * @param array $missingParams the names of the missing parameters * @param array $unknownParams the unknown parameters (name=>value) - * @throws InvalidRequestException if there are missing or unknown parameters + * @throws BadUsageException if there are missing or unknown parameters */ public function validateActionParams($action, $missingParams, $unknownParams) { if (!empty($missingParams)) { - throw new InvalidRequestException(Yii::t('yii', 'Missing required options: {params}', array( + throw new BadUsageException(Yii::t('yii', 'Missing required options: {params}', array( '{params}' => implode(', ', $missingParams), ))); } elseif (!empty($unknownParams)) { - throw new InvalidRequestException(Yii::t('yii', 'Unknown options: {params}', array( + throw new BadUsageException(Yii::t('yii', 'Unknown options: {params}', array( '{params}' => implode(', ', $unknownParams), ))); } @@ -103,12 +102,6 @@ class Controller extends \yii\base\Controller } } - public function usageError($message) - { - echo "\nError: $message\n"; - Yii::$application->end(1); - } - public function globalOptions() { return array(); diff --git a/framework/console/controllers/HelpController.php b/framework/console/controllers/HelpController.php index 6e4b397..d1dc697 100644 --- a/framework/console/controllers/HelpController.php +++ b/framework/console/controllers/HelpController.php @@ -9,7 +9,9 @@ namespace yii\console\controllers; +use Yii; use yii\base\Application; +use yii\console\BadUsageException; use yii\base\InlineAction; use yii\console\Controller; use yii\util\StringHelper; @@ -47,27 +49,28 @@ class HelpController extends Controller * @param array $args additional anonymous command line arguments. * You may provide a command name to display its detailed information. * @return integer the exit status + * @throws BadUsageException if the command for help is unknown */ public function actionIndex($args = array()) { if (empty($args)) { - $status = $this->getHelp(); + $this->getHelp(); } else { - $result = \Yii::$application->createController($args[0]); + $result = Yii::$application->createController($args[0]); if ($result === false) { - echo "Error: no help for unknown command \"{$args[0]}\".\n"; - return 1; + throw new BadUsageException(Yii::t('yii', 'No help for unknown command "{command}".', array( + '{command}' => $args[0], + ))); } list($controller, $actionID) = $result; if ($actionID === '') { - $status = $this->getControllerHelp($controller); + $this->getControllerHelp($controller); } else { - $status = $this->getActionHelp($controller, $actionID); + $this->getActionHelp($controller, $actionID); } } - return $status; } /** @@ -76,7 +79,7 @@ class HelpController extends Controller */ public function getCommands() { - $commands = $this->getModuleCommands(\Yii::$application); + $commands = $this->getModuleCommands(Yii::$application); sort($commands); return array_unique($commands); } @@ -91,7 +94,6 @@ class HelpController extends Controller $actions = array_keys($controller->actions()); $class = new \ReflectionClass($controller); foreach ($class->getMethods() as $method) { - /** @var $method \ReflectionMethod */ $name = $method->getName(); if ($method->isPublic() && !$method->isStatic() && strpos($name, 'action') === 0 && $name !== 'actions') { $actions[] = StringHelper::camel2id(substr($name, 6)); @@ -136,7 +138,6 @@ class HelpController extends Controller /** * Displays all available commands. - * @return integer the exit status */ protected function getHelp() { @@ -152,13 +153,11 @@ class HelpController extends Controller } else { echo "\nNo commands are found.\n"; } - return 0; } /** * Displays the overall information of the command. * @param Controller $controller the controller instance - * @return integer the exit status */ protected function getControllerHelp($controller) { @@ -199,22 +198,21 @@ class HelpController extends Controller } echo "\n"; } - - return 0; } /** * Displays the detailed information of a command action. * @param Controller $controller the controller instance * @param string $actionID action ID - * @return integer the exit status + * @throws BadUsageException if the action does not exist */ protected function getActionHelp($controller, $actionID) { $action = $controller->createAction($actionID); if ($action === null) { - echo 'Error: no help for unknown sub-command "' . $controller->getUniqueId() . "/$actionID\".\n"; - return 1; + throw new BadUsageException(Yii::t('yii', 'No help for unknown sub-command "{command}".', array( + '{command}' => $controller->getUniqueId() . "/$actionID", + ))); } if ($action instanceof InlineAction) { $method = new \ReflectionMethod($controller, 'action' . $action->id); @@ -245,8 +243,6 @@ class HelpController extends Controller } echo "\n"; } - - return 0; } /**