在 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], ], ]);
近期评论