Yii对名称空间使用直观的命名约定,该命名约定从\ application开始,并且必须遵循物理目录结构,如内置的自动载入配置。 如果你的基础myController的类是在保护/控制器/,那么它应该使用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
}
要像“子目录的请求/我的“工作,您需要在包含类文件后将以下代码添加到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\\
。
我认为这会更好地问在堆栈溢出。如果是这样,我可以返回奖金并迁移问题。如果您同意,请告诉我。 – ChrisF 2011-01-31 14:32:24