Fixes #2821: Console help command incorrectly lists non-console controllers as available commands

This commit is contained in:
Qiang Xue
2014-06-24 10:50:43 -04:00
parent bf599b96bb
commit 607294a4f1
3 changed files with 21 additions and 1 deletions

View File

@ -157,7 +157,10 @@ class HelpController extends Controller
$files = scandir($controllerPath);
foreach ($files as $file) {
if (strcmp(substr($file, -14), 'Controller.php') === 0) {
$commands[] = $prefix . Inflector::camel2id(substr(basename($file), 0, -14));
$controllerClass = $module->controllerNamespace . '\\' . substr(basename($file), 0, -4);
if ($this->validateControllerClass($controllerClass)) {
$commands[] = $prefix . Inflector::camel2id(substr(basename($file), 0, -14));
}
}
}
}
@ -165,6 +168,21 @@ class HelpController extends Controller
return $commands;
}
/**
* Validates if the given class is a valid console controller class.
* @param string $controllerClass
* @return bool
*/
protected function validateControllerClass($controllerClass)
{
if (class_exists($controllerClass)) {
$class = new \ReflectionClass($controllerClass);
return !$class->isAbstract() && $class->isSubclassOf('yii\console\Controller');
} else {
return false;
}
}
/**
* Displays all available commands.
*/