Yii 创建简单的控制器别名

Yii 创建简单的控制器别名,yii,alias,Yii,Alias,我不确定我是否使用了正确的术语,因此我将描述我想要实现的目标 我有一个名为ControllerA的控制器,希望一个名为ControllerB的“虚拟”控制器的功能与ControllerA完全相同 基本上,我只希望url site.com/ControllerB加载与site.com/ControllerA相同的页面(但不重定向) 希望我的描述足够清楚。您可以使用ControllerB扩展ControllerA并提供扩展控制器名称。下一个覆盖getViewPath方法。属性extendedCont

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

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

基本上,我只希望url site.com/ControllerB加载与site.com/ControllerA相同的页面(但不重定向)


希望我的描述足够清楚。

您可以使用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();
    }
}

您可以通过一个简单的URL规则实现您想要的:

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

'controllerA/

我对控制器中的别名一无所知,但您可以使用“forward()”来使用另一个控制器的操作。您可以只在控制器中命名操作,然后转发到其他控制器操作。前锋不是一个重定向,而是一个重用。@Jorge这似乎是一个正确的方向。但是,是否可以在不手动指定每个操作的情况下转发所有操作?您希望实现什么?不需要创建两个相同的控制器。+1,但您应该更正
controllera
,并使用
而不是
@soju-Typo-fixed。
:\w+
不是绝对必要的。只有当您有更多同样以
controllerB
开头并需要消除歧义的规则时。否则,
:“[…]如果省略ParamPattern,则意味着该参数应匹配除斜杠/“我知道:)之外的任何字符,我只是认为是proper@soju如果我可以选择键入某些内容,或者因为没有必要而将其保留,我通常知道该怎么做;)。对我来说,少就是多。