Yii 创建简单的控制器别名
我不确定我是否使用了正确的术语,因此我将描述我想要实现的目标 我有一个名为ControllerA的控制器,希望一个名为ControllerB的“虚拟”控制器的功能与ControllerA完全相同 基本上,我只希望url site.com/ControllerB加载与site.com/ControllerA相同的页面(但不重定向)Yii 创建简单的控制器别名,yii,alias,Yii,Alias,我不确定我是否使用了正确的术语,因此我将描述我想要实现的目标 我有一个名为ControllerA的控制器,希望一个名为ControllerB的“虚拟”控制器的功能与ControllerA完全相同 基本上,我只希望url site.com/ControllerB加载与site.com/ControllerA相同的页面(但不重定向) 希望我的描述足够清楚。您可以使用ControllerB扩展ControllerA并提供扩展控制器名称。下一个覆盖getViewPath方法。属性extendedCont
希望我的描述足够清楚。您可以使用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如果我可以选择键入某些内容,或者因为没有必要而将其保留,我通常知道该怎么做;)。对我来说,少就是多。