Yii は名前空間に直観的な命名規則を使用します。名前空間は \application から始まり、組み込みの autoload 構成のように物理ディレクトリ構造に従わなければなりません。ベースの MyController クラスが protected/controllers/ にある場合は、それを使用する必要がありますnamespace application\controllers;
<?php
namespace application\controllers;
class MyController extends \CController
{
// actions
}
protected/controllers/subdir/ の子 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\\。