適切な用語を使用しているかわからないので、達成したいことを説明します。
ControllerA というコントローラーがあり、ControllerB という「仮想」コントローラーを ControllerA とまったく同じように機能させたいと考えています。
基本的に、URL site.com/ControllerBがsite.com/ControllerAと同じページをロードするようにしたいだけです(ただし、リダイレクトはしません)。
私の説明が十分に明確であることを願っています。
単純な URL ルールを使用して、目的を達成できます。
'controllerA/<a>' => 'controllerA/<a>',
'controllerB/<a>' => 'controllerA/<a>',
URL ルールについて詳しくは、http ://www.yiiframework.com/doc/guide/1.1/en/topics.url#user-friendly-urls をご覧ください。
ControllerA を ControllerB で拡張し、拡張されたコントローラー名を提供できます。次のオーバーライドgetViewPath
メソッド。属性extendedControler
は、基本的なコントローラー名を提供します。
class ControllerBController extends ControllerAController
{
private $extendedControler = 'ControllerA';
public function getViewPath() {
$nI = Yii::app()->createController($this->extendedControler);
return $nI[0]->getViewPath();
}
}
もちろん、いくつかの文字列変更を使用できます。str_ireplace のように:
class Klient2Controller extends KlientController
{
public function getViewPath() {
//We must extract parent class views directory
$c = get_parent_class($this);
$c = str_ireplace('Controller', '', $c); //Extract only controller name
$nI = Yii::app()->createController($c);
return $nI[0]->getViewPath();
}
}