2017-07-15 21:50:09 4173次浏览 2条回答 0 悬赏 10 金钱

Yii2路由疑问。因为最近在Yii路由的时候遇到了一个问题,想请教下。

www.xxx.cn/site/aaa 默认是访问site控制器的aaa方法;现在美化成 www.xxx.cn/aaa 进行访问。

但是这个和模块的路由冲突了。

比如现有一个shop模块,默认路由是www.xxx.cn/shop/default/index 也想美化成www.xxx.cn/shop 进行访问。

  • 回答于 2017-07-15 22:43 举报

    自定义路由解析

    'urlManager' => [
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'rules' => [
                    'shop' => 'site/shop',
                ],
            ]
        ],
    
    1 条回复
    回复于 2017-07-17 10:27 回复

    'rules' => [

      '/' => 'site/index',  //默认应用控制器
      '<action:\w+>' => 'site/<action>', //去掉默认控制器的site
      '<modules:\w+>' => '<modules>/default/index', //应用下模块的路由,去掉default/index。和上者冲突
      '<controller:\w+>/<action:\w+>' => '<controller>/<action>', //应用下 控制器/方法 的路由
      '<modules:\w+>/<action:\w+>' => '<modules>/default/<action>', //应用模块下默认控制器的路由,去掉default,和上者冲突
    

    ],

  • 回答于 2017-07-19 18:29 举报

    1.首先你要重写UrlManager 路由的这个类
    <?php

    namespace frontend\components;

    use Yii;
    use yii\web\UrlManager;

    class sanUrlManager extends UrlManager
    {

    public $enableSanUrl = false;
    
    public function init()
    {
        parent::init();
    }
    
    public function createUrl($map)
    {
        $urlHtml = '';
        $params = (array)$map;
        if (isset($params[0])) {
            $route = explode('/', trim($params[0], '/'));
            unset($params[0]);
            $controllerName = strtolower($route[0]);
            $actionName = isset($route[1]) ? strtolower($route[1]) : 'index';
    
            if(($controllerName == 'site') && ($actionName== 'aaa')){
                $urlHtml = 'aaa';
            }
            return $urlHtml;
        }
    }
    

    }

    2.更改main 下的 components

    'components' => [  
    
        'urlManager' => [
          'class' => 'frontend\components\sanUrlManager' ,
            'enablePrettyUrl' => true,
            'showScriptName' => false,
           'enableSanUrl' => true ,
            'enableStrictParsing' => false,
         
           'rules' => [
                '/error' => 'site/error',
                '<cat:(aaa)>/?' => 'site/aaa',
               
            ],
    
        ],
    
您需要登录后才可以回答。登录 | 立即注册
mydzoo
总监

mydzoo

注册时间:2017-01-05
最后登录:2022-03-29
在线时长:53小时40分
  • 粉丝4
  • 金钱2075
  • 威望10
  • 积分2705

热门问题