创建一个简单的控制器别名

时间:2013-04-17 12:28:06

标签: yii alias

我不确定我是否使用了正确的术语,所以我将描述我想要实现的目标。

我有一个名为ControllerA的控制器,并希望一个名为ControllerB的“虚拟”控制器与ControllerA完全相同。

基本上我只想让网址 site.com/ControllerB 加载与 site.com/ControllerA 相同的页面(但不能重定向)。

希望我的描述足够清楚。

2 个答案:

答案 0 :(得分:5)

您可以使用简单的网址规则来实现您的目标:

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

在此处详细了解网址规则:http://www.yiiframework.com/doc/guide/1.1/en/topics.url#user-friendly-urls

答案 1 :(得分: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();
    }
}