Browse Source

Refactored usage error in console commands.

tags/2.0.0-beta
Qiang Xue 12 years ago
parent
commit
2d7f048b74
  1. 12
      framework/console/Application.php
  2. 33
      framework/console/BadUsageException.php
  3. 13
      framework/console/Controller.php
  4. 34
      framework/console/controllers/HelpController.php

12
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)
{
}
}

33
framework/console/BadUsageException.php

@ -0,0 +1,33 @@
<?php
/**
* BadUsageException class file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright &copy; 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yii\console;
/**
* BadUsageException represents an exception caused by incorrect usage of the end user.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @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');
}
}

13
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();

34
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;
}
/**

Loading…
Cancel
Save