在 Yii2 中,如何实现 case/ 的路由
1、在 Yii2 中,如何实现 case/ 的路由。如果配置 ‘case/’ => ‘use-case/index’, 是无效的,打开 /case/ 会 302 重定向至 /case. 如图1
2、调整配置如下,’suffix’ => ‘/’, 响应 200 ,且打开 /case,也会自动跳转至 /case/ 符合预期。如图2
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing' => true,
'normalizer' => [
'class' => yii\web\UrlNormalizer::class,
'collapseSlashes' => true,
'normalizeTrailingSlash' => true,
],
'rules' => [
// 精彩案例
[
'pattern' => 'case',
'route' => 'use-case/index',
'suffix' => '/',
],
],
],
3、 生成的链接为:精彩案例 。符合预期。如图3
4、/case/list-.html 当点击第 1 页时的链接是这样的。希望是 /case/
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 9,
'pageSizeParam' => false,
'pageParam' => 'page',
],
'sort' => [
'defaultOrder' => ['id' => SORT_DESC],
],
]);
<?= LinkPager::widget([
'pagination' => $dataProvider->pagination,
'options' => ['class' => 'page'], // <ul class="page">
'linkContainerOptions' => ['tag' => 'li'],
'activePageCssClass' => 'active',
'prevPageCssClass' => 'prev',
'nextPageCssClass' => 'next',
'disabledPageCssClass' => 'disabled',
'nextPageLabel' => '下一页',
'prevPageLabel' => '上一页',
]) ?>
5、自定义 Pagination 类 Yii 默认从第 0 页开始分页,第一页是 page=0,需要重写分页类来处理第一页单独的 URL。
<?php
namespace frontend\components;
use yii\data\Pagination;
use Yii;
class CleanPagination extends Pagination
{
public function createUrl($page, $pageSize = null, $absolute = false)
{
$params = $this->params === null ? Yii::$app->getRequest()->getQueryParams() : $this->params;
// 移除 page 参数
unset($params[$this->pageParam]);
if ($page > 0) {
// 页码从0开始,所以需要 +1
$params[$this->pageParam] = $page + 1;
// 第二页及以上:/case/list-2.html
return Yii::$app->getUrlManager()->createUrl(array_merge(
['use-case/index'],
$params
));
}
// 第1页:/case/
return Yii::$app->getUrlManager()->createUrl(array_merge(
['use-case/index'],
$params
));
}
}
// $dataProvider = new ActiveDataProvider([
// 'query' => $query,
// 'pagination' => [
// 'pageSize' => 9,
// 'pageSizeParam' => false,
// 'pageParam' => 'page',
// ],
// 'sort' => [
// 'defaultOrder' => ['id' => SORT_DESC],
// ],
// ]);
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => new CleanPagination([
'totalCount' => $query->count(),
'pageSize' => 9,
'pageSizeParam' => false,
'pageParam' => 'page',
]),
'sort' => [
'defaultOrder' => ['id' => SORT_DESC],
],
]);


![<?= Html::a('精彩案例', ['use-case/index'], ['target' => '_blank']) ?> 生成的链接为:<a href="/case/" target="_blank">精彩案例</a> 。符合预期。](https://www.shuijingwanwq.com/wp-content/uploads/2025/07/3-3.jpg)
近期评论