没有不值得去解决的问题,也没有不值得去学习的技术!

在 Yii2 中,如何实现 case/ 的路由

在 Yii2 中,如何实现 case/ 的路由。如果配置 'case/' => 'use-case/index', 是无效的,打开 /case/ 会 302 重定向至 /case.

1、在 Yii2 中,如何实现 case/ 的路由。如果配置 ‘case/’ => ‘use-case/index’, 是无效的,打开 /case/ 会 302 重定向至 /case. 如图1

在 Yii2 中,如何实现 case/ 的路由。如果配置 'case/' => 'use-case/index', 是无效的,打开 /case/ 会 302 重定向至 /case.
图1

2、调整配置如下,’suffix’ => ‘/’, 响应 200 ,且打开 /case,也会自动跳转至 /case/ 符合预期。如图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

<?= Html::a('精彩案例', ['use-case/index'], ['target' => '_blank']) ?> 生成的链接为:<a href="/case/" target="_blank">精彩案例</a> 。符合预期。
图3

4、/case/list-.html 当点击第 1 页时的链接是这样的。希望是 /case/


        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                'pageSize' => 9,
                'pageSizeParam' => false,
                'pageParam' => 'page',
            ],
            'sort' => [
                'defaultOrder' => ['id' => SORT_DESC],
            ],
        ]);

             $dataProvider->pagination,
                'options' => ['class' => 'page'], // 
                'linkContainerOptions' => ['tag' => 'li'],
                'activePageCssClass' => 'active',
                'prevPageCssClass' => 'prev',
                'nextPageCssClass' => 'next',
                'disabledPageCssClass' => 'disabled',
                'nextPageLabel' => '下一页',
                'prevPageLabel' => '上一页',
            ]) ?>



5、自定义 Pagination 类 Yii 默认从第 0 页开始分页,第一页是 page=0,需要重写分页类来处理第一页单独的 URL。


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],
            ],
        ]);


PHP / Laravel / Yii2 老项目维护与长期技术支持

如果你的 PHP / Laravel / Yii2 项目已经上线,但遇到原开发离职、Bug 长期无人修复、接口不稳定、性能下降、代码难以接手等问题,可以联系我做一次远程技术排查。

适合以下情况:
✅ 老旧 PHP 系统无人维护
✅ Laravel / Yii2 项目 Bug 修复
✅ 后台管理系统小功能迭代
✅ RESTful API 接口排查
✅ MySQL / Redis / Nginx 性能问题
✅ 长期远程兼职维护

可先从一次小问题开始:
✅ 线上报错排查
✅ 接口异常分析
✅ 慢查询与性能瓶颈定位
✅ 代码结构初步评估
✅ 部署环境与日志检查

如需咨询,请联系我,并注明:PHP 维护咨询

联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理