Yii2 GridView分页按钮失效,点击后出现404错误如何解决?
Yii2 GridView分页按钮点击后404问题解决
问题现象
使用Yii2的GridView展示数据时,点击分页按钮(如第2页),页面跳转到http://localhost/testyii/frontend/web/products/view?page=2&per-page=3,但服务器返回404 Not found错误。
原代码
控制器代码
public function actionView() { $WmProducts = WmProducts::find(); $dataProvider = new ActiveDataProvider ([ 'query' =>$WmProducts, 'pagination' => ['pageSize'=>3], ]); return $this->render('view', [ 'dataProvider' =>$dataProvider]); }
视图代码
<?php use yii\grid\GridView; use yii\data\ActiveDataProvider; use yii\widgets\ActiveForm; use yii\helpers\Html; use yii\widgets\Pjax; use app\models\Client; ?> <?php echo GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ 'id', [ 'attribute' => 'name', 'format' => 'text' ], [ 'attribute' => 'wholesale_price', 'format' => 'text' ], [ 'attribute' => 'is_retail', 'format' => 'text' ], [ 'attribute' => 'distributor_price', 'format' => 'Text' ] ] ]); ?>
问题原因
Yii2默认路由规则中,view动作属于详情页动作,框架默认要求该动作接收主键参数(如id)来查询单条数据。当用view动作渲染列表并传递分页参数时,框架无法匹配到正确的路由规则,因此返回404错误。
解决方法
方法1:改用标准列表页动作(推荐)
将控制器中的actionView改为actionIndex——index是Yii2默认的列表页动作,不需要主键参数:
修改后的控制器代码:
public function actionIndex() { $WmProducts = WmProducts::find(); $dataProvider = new ActiveDataProvider ([ 'query' =>$WmProducts, 'pagination' => ['pageSize'=>3], ]); return $this->render('index', [ 'dataProvider' =>$dataProvider]); }
同时将视图文件重命名为index.php,访问路径改为http://localhost/testyii/frontend/web/products/index,分页按钮即可正常工作。
方法2:修改路由规则,允许view动作无主键访问
如果必须保留view动作,在config/web.php的urlManager配置中添加自定义路由规则:
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ // 自定义规则:允许products/view不带id参数访问 'products/view' => 'products/view', // 原有默认规则(保持不变) '<controller:\w+>/<id:\d+>' => '<controller>/view', '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', '<controller:\w+>/<action:\w+>' => '<controller>/<action>', ], ],
注意要将自定义规则放在默认规则前面,避免被覆盖。
附加检查
确保Web服务器已配置URL重写:
- Apache:开启
mod_rewrite模块,项目根目录和web目录下存在.htaccess文件 - Nginx:配置文件中添加重写规则,将请求导向
web/index.php
内容的提问来源于stack exchange,提问作者Pavalion
相关产品推荐
相关产品推荐

