Yii 对命名空间使用直观的命名约定,从 \application 开始,并且必须遵循物理目录结构,如内置的自动加载配置。如果您的基础 MyController 类位于 protected/controllers/ 中,那么它应该使用namespace application\controllers;
<?php
namespace application\controllers;
class MyController extends \CController
{
// actions
}
和受保护/控制器/子目录/中的子 MyController
<?php
namespace application\controllers\subdir;
class MyController extends \application\controllers\MyController
{
// actions
}
要使“subdir/my”之类的请求正常工作,您需要CWebApplication::createController()
在包含类文件之后立即将以下代码添加到(或在子类中继承它):
if(!class_exists($className,false))
require($classFile);
+ if(!class_exists($className,false))
+ $className = '\\application\\controllers\\' . str_replace('/', '\\', $controllerID . $className);
if(class_exists($className,false) && is_subclass_of($className,'CController'))
{
$id[0]=strtolower($id[0]);
return array(
new $className($controllerID.$id,$owner===$this?null:$owner),
$this->parseActionParams($route),
);
}
如果您有设置controllerNameSpace
,CWebApplication
您也可以使用该值而不是硬编码\\application\\controllers\\
。