2

適切な用語を使用しているかわからないので、達成したいことを説明します。

ControllerA というコントローラーがあり、ControllerB という「仮想」コントローラーを ControllerA とまったく同じように機能させたいと考えています。

基本的に、URL site.com/ControllerBがsite.com/ControllerAと同じページをロードするようにしたいだけです(ただし、リダイレクトはしません)。

私の説明が十分に明確であることを願っています。

4

2 に答える 2

5

単純な URL ルールを使用して、目的を達成できます。

'controllerA/<a>'   => 'controllerA/<a>',
'controllerB/<a>'   => 'controllerA/<a>',

URL ルールについて詳しくは、http ://www.yiiframework.com/doc/guide/1.1/en/topics.url#user-friendly-urls をご覧ください。

于 2013-04-17T13:02:06.873 に答える
0

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();
    }
}
于 2013-04-17T13:01:28.070 に答える