Yii2控制器路由和模块路由美化冲突问题求解? [ 2.0 版本 ]
Yii2路由疑问。因为最近在Yii路由的时候遇到了一个问题,想请教下。
www.xxx.cn/site/aaa 默认是访问site控制器的aaa方法;现在美化成 www.xxx.cn/aaa 进行访问。
但是这个和模块的路由冲突了。
比如现有一个shop模块,默认路由是www.xxx.cn/shop/default/index 也想美化成www.xxx.cn/shop 进行访问。
共 2 个回答
-
自定义路由解析
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ 'shop' => 'site/shop', ], ] ],
共 1 条回复'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,和上者冲突
],
-
1.首先你要重写UrlManager 路由的这个类
<?phpnamespace 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
注册时间:2017-01-05
最后登录:2022-03-29
在线时长:53小时40分
最后登录:2022-03-29
在线时长:53小时40分
- 粉丝4
- 金钱2075
- 威望10
- 积分2705