You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:39:53