Yii2 LinkPager带自定义参数生成美观URL问题
解决LinkPager生成美观URL的问题
看起来你已经配置了URL管理器的美观路由规则,但LinkPager没按预期生成目标格式的URL,核心问题出在分页组件的参数名和路由规则占位符不匹配,再加上没明确指定路由导致的。下面一步步帮你修复:
1. 修正分页参数,匹配路由规则占位符
你的路由规则里的占位符是 <page:\d+>、<job_id:\d+>、<min_price:\d+>、<experience:\d+>,但当前pagination的params键名和这些占位符不一致:
- 路由用
job_id,你写了job - 路由用
min_price,你写了order-price - 路由用
experience,你写了order-exp
URL管理器只能匹配完全一致的参数名,所以先修正pagination配置:
$pagination = [ 'pageSize' => 1, 'forcePageParam' => true, 'pageSizeParam' => false, 'params' => [ 'page' => $this->page, 'job_id' => $this->job_id, // 和路由占位符<job_id>对应 'min_price' => $this->min_price, // 和路由占位符<min_price>对应 'experience' => $this->experience, // 和路由占位符<experience>对应 ] ];
2. 在LinkPager中显式指定路由
默认情况下LinkPager可能基于当前请求路由生成URL,但为了确保它匹配你定义的规则,需要在Widget配置里明确指定route:
echo LinkPager::widget([ 'pagination' => $pagination, 'route' => 'site/index', // 对应路由规则里的目标action ]);
3. 确认URL管理器规则的正确性
虽然你说规则配置正常,但再核对一遍格式(你的规则本身没问题,确保没有语法错误即可):
$rules = [ 'site/page/<page:\d+>/job/<job_id:\d+>/order-price/<min_price:\d+>/order-exp/<experience:\d+>/' => 'site/index' ]; 'components' => [ 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'suffix' => '/', 'rules' => $rules, ], ];
为什么之前的配置不生效?
LinkPager生成URL时,会把pagination里的params传给URL管理器。如果参数名和路由占位符不匹配,URL管理器找不到对应的规则,就会降级生成带查询参数的?foo=bar格式URL。
完成以上修改后,LinkPager应该就能正确生成你想要的美观URL,比如/site/page/1/job/2/order-price/3/order-exp/4/。
内容的提问来源于stack exchange,提问作者P.Shatalov
相关产品推荐
相关产品推荐

