我不确定我是否使用了正确的术语,所以我将描述我想要实现的目标。
我有一个名为ControllerA的控制器,并希望一个名为ControllerB的“虚拟”控制器与ControllerA完全相同。
基本上我只想让网址 site.com/ControllerB 加载与 site.com/ControllerA 相同的页面(但不能重定向)。
希望我的描述足够清楚。
答案 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();
}
}