编程语言
首页 > 编程语言> > php-getUrlRules-切换至控制器

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