/case – 永夜 https://www.shuijingwanwq.com 没有不值得去解决的问题,也没有不值得去学习的技术! Sun, 17 May 2026 06:11:02 +0000 zh-Hans hourly 1 https://wordpress.org/?v=7.0 在 Yii2 中,如何实现 case/ 的路由 https://www.shuijingwanwq.com/2025/07/11/9218/ https://www.shuijingwanwq.com/2025/07/11/9218/#respond Fri, 11 Jul 2025 01:53:41 +0000 https://www.shuijingwanwq.com/?p=9218 浏览量: 90

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


]]>
https://www.shuijingwanwq.com/2025/07/11/9218/feed/ 0
当网址为 /case 或者 /case/ 时,Yii getAlias 生成的图片地址不一样,进而导致 404 https://www.shuijingwanwq.com/2025/07/09/9204/ https://www.shuijingwanwq.com/2025/07/09/9204/#respond Wed, 09 Jul 2025 03:12:09 +0000 https://www.shuijingwanwq.com/?p=9204 浏览量: 60

1、视图中代码实现如下

当网址为 http://official.local/case 时,生成的 ,图片地址为 http://official.local/static/images/header/top.png,响应 200

当网址为 http://official.local/case/ 时,生成的 ,图片地址为 http://official.local/case/images/top.png ,响应 404。怎样解决?如图1

当网址为 http://official.local/case/ 时,生成的 <img class="top-icon" src="./images/top.png"> ,图片地址为 http://official.local/case/images/top.png ,响应 404。怎样解决?

图1

2、查看 http://official.local/case/ 的页面源代码,生成的 ,图片地址为 http://official.local/case/images/top.png ,响应 404。如图2

查看 http://official.local/case/ 的页面源代码,生成的 <img class="top-icon" src="./images/top.png"> ,图片地址为 http://official.local/case/images/top.png ,响应 404

图2

3、查看 Debug,原来已经报错,且响应 404 yii\base\InvalidRouteException: Unable to resolve the request “case/”. ,如图3

查看 Debug,原来已经报错,且响应 404 yii\base\InvalidRouteException: Unable to resolve the request "case/".

图3


yii\base\InvalidRouteException: Unable to resolve the request "case/". in C:\wwwroot\official-website-management-system\src\vendor\yiisoft\yii2\base\Module.php:561
Stack trace:
#0 C:\wwwroot\official-website-management-system\src\vendor\yiisoft\yii2\web\Application.php(103): yii\base\Module->runAction('case/', Array)
#1 C:\wwwroot\official-website-management-system\src\vendor\yiisoft\yii2\base\Application.php(384): yii\web\Application->handleRequest(Object(yii\web\Request))
#2 C:\wwwroot\official-website-management-system\src\frontend\web\index.php(18): yii\base\Application->run()
#3 {main}

Next yii\web\NotFoundHttpException: Page not found. in C:\wwwroot\official-website-management-system\src\vendor\yiisoft\yii2\web\Application.php:115
Stack trace:
#0 C:\wwwroot\official-website-management-system\src\vendor\yiisoft\yii2\base\Application.php(384): yii\web\Application->handleRequest(Object(yii\web\Request))
#1 C:\wwwroot\official-website-management-system\src\frontend\web\index.php(18): yii\base\Application->run()
#2 {main}


4、最终实现了一个小的帮助类方法


    public static function url($path): string
    {
        $cdn = Yii::$app->params['cdnDomainHttps'] ?? '';
        return rtrim($cdn, '/') . '/' . ltrim($path, '/');
    }




]]>
https://www.shuijingwanwq.com/2025/07/09/9204/feed/ 0