Yii2中如何隐藏URL中的id查询参数?
解决方法
你的urlManager配置中rules数组为空,这是Pretty URL规则未生效的核心原因。要实现隐藏id参数并将URL简化为backend/codici,可按以下步骤处理:
1. 添加URL路由规则
修改config/web.php中的urlManager配置,补充路由映射规则:
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ // 将 backend/codici 映射到 codici 控制器的 view 动作 'backend/codici' => 'codici/view', ], ],
2. 处理id参数的传递
由于view动作通常依赖id参数,若要完全隐藏它,可选择以下两种方式:
- POST请求传递:在视图中通过隐藏表单字段提交
id,而非GET参数。示例代码:<?php $form = ActiveForm::begin(['action' => ['codici/view']]); ?> <?= $form->field($model, 'id')->hiddenInput(['value' => 1])->label(false) ?> <?= Html::submitButton('访问页面', ['class' => 'btn btn-primary']) ?> <?php ActiveForm::end(); ?> - Session存储传递:跳转前将
id存入Session,在view动作中读取:// 跳转前的动作代码 Yii::$app->session->set('codici_id', 1); return $this->redirect(['codici/view']); // CodiciController的view动作代码 $id = Yii::$app->session->get('codici_id'); if (!$id) { return $this->redirect(['codici/index']); // 无id时跳转至列表页 }
3. 设置控制器默认动作(可选)
若希望访问backend/codici时默认执行view动作,可在CodiciController中添加配置:
class CodiciController extends Controller { public $defaultAction = 'view'; // 指定默认动作为view // 其他控制器代码... }
补充说明
如果view动作需要通过GET请求且必须保留id参数,完全隐藏会导致参数丢失,此时更合理的优化是将URL改为backend/codici/1形式,对应的路由规则为:
'rules' => [ 'backend/codici/<id:\d+>' => 'codici/view', ],
这样既去掉了?id=的参数形式,又能正常传递id。
内容的提问来源于stack exchange,提问作者jackall90
相关产品推荐
相关产品推荐

