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