我不确定我是否使用了正确的术语,所以我将描述我想要实现的目标。
我有一个名为 ControllerA 的控制器,并希望一个名为 ControllerB 的“虚拟”控制器的功能与 ControllerA 完全相同。
基本上我只希望 url site.com/ControllerB加载与site.com/ControllerA相同的页面(但不重定向)。
希望我的描述足够清楚。
你可以通过一个简单的 URL 规则来实现你想要的:
'controllerA/<a>' => 'controllerA/<a>',
'controllerB/<a>' => 'controllerA/<a>',
在此处阅读有关 URL 规则的更多信息:http ://www.yiiframework.com/doc/guide/1.1/en/topics.url#user-friendly-urls
您可以使用 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();
}
}