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

您可以使用 ControllerB 扩展 ControllerA 并提供扩展控制器名称。下一个覆盖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 回答