php-getUrlRules-切换至控制器
作者:互联网
我有一个SearchModule.php具有以下内容:
class SearchModule extends CWebModule
{
// function init() { }
/**
* @return array Правила роутинга для текущего модуля
*/
function getUrlRules()
{
$customController = (Yii::app()->theme->getName() == 'test' ? 'Test' : '') . '<controller>';
return array(
$this->id.'/<controller:\w+>/<action:(SupportBlock)>/<countryId:\d+>' => $this->id.'/' . $customController . '/<action>',
$this->id.'/<controller:\w+>/<action:(SupportBlock)>/<countryId:\d+>/<cityId:\d+>' => $this->id.'/' . $customController . '/<action>',
$this->id.'/visas' => $this->id.'/visas/fullVisasInfo',
);
}
}
我要弄清楚的是,如果“主题”设置为“测试”,如何使用另一个控制器.现在,它具有名为HotelsController或LocationsController的搜索控制器.我想要达到的目的是,如果主题的名称设置为“ test”,它应该将所有请求从SAME URL路由到TestHotelsController或TestLocationsController(/ search / hotels应该路由到TestHotelsController而不是HotelsController).
我尝试通过将“ Test”添加到路由表的第二部分来尝试执行此操作,但这似乎无济于事.
解决方法:
您不要将关键字< controller>组合在一起.任何类型的控制器名称.您可以为它指定一个自定义的唯一控制器名称,也可以为它< controller>关键字以读取给定的控制器.而且您的控制器名称不是TestController,而是TestHotelsController,因此,请尝试按以下方式更改代码:
function getUrlRules()
{
$customController = (Yii::app()->theme->getName() == 'test' ? 'hotelsTest' : 'hotels');
if(strpos(Yii::app()->urlManager->parseUrl(Yii::app()->request), 'hotel')) {
$rules = array(
$this->id . '/<controller:\w+>/<action:(SupportBlock)>/<countryId:\d+>' => $this->id . '/' . $customController . '/<action>',
$this->id . '/<controller:\w+>/<action:(SupportBlock)>/<countryId:\d+>/<cityId:\d+>' => $this->id . '/' . $customController . '/<action>',
$this->id . '/visas' => $this->id . '/visas/fullVisasInfo',
);
}
else {
$rules = array(
$this->id.'/<controller:\w+>/<action:(SupportBlock)>/<countryId:\d+>' => $this->id.'/<controller>/<action>',
$this->id.'/<controller:\w+>/<action:(SupportBlock)>/<countryId:\d+>/<cityId:\d+>' => $this->id.'/<controller>/<action>',
$this->id.'/visas' => $this->id.'/visas/fullVisasInfo',
);
}
return $rules;
}
标签:url-routing,yii1-x,php 来源: https://codeday.me/bug/20191026/1936728.html