如何在yii2的uniapp项目中处理提交重复问题?

文章目录

  • 前言
  • [一、前端防重复提交(UniApp 端)](#一、前端防重复提交(UniApp 端))
  • [二、后端防重复提交(Yii2 端)](#二、后端防重复提交(Yii2 端))
  • 总结

前言

在 Yii2 的 UniApp 项目中处理提交重复问题,需结合前端和后端的双重防护机制。以下是具体方案:


一、前端防重复提交(UniApp 端)

UniApp 通过请求拦截器实现全局防重复提交:

javascript 复制代码
// 在 main.js 或 uni-app 的拦截器配置中
uni.addInterceptor('request', {
  invoke(args) {
    // 请求前禁用按钮
    uni.showLoading({ title: '提交中...' });
    args.header['Idempotency-Key'] = generateIdempotencyKey(); // 生成唯一标识
  },
  success(res) {
    // 请求成功后恢复按钮
    uni.hideLoading();
  },
  fail(err) {
    // 请求失败后恢复按钮
    uni.hideLoading();
  }
});

function generateIdempotencyKey() {
  return 'idempotency_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
}

二、后端防重复提交(Yii2 端)

在 Yii2 控制器中添加幂等性校验:

php 复制代码
public function actionCreate()
{
    $key = Yii::$app->request->getHeaders()->get('Idempotency-Key');
    if ($key && Yii::$app->cache->exists($key)) {
        return $this->asJson(['error' => '重复提交']);
    }

    $model = new Campus();
    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        Yii::$app->cache->set($key, true, 300); // 缓存5分钟
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('create', ['model' => $model]);
    }
}

总结

关键说明:

‌前端拦截器‌:通过 Idempotency-Key 头传递唯一标识,防止用户重复点击提交按钮。

‌后端幂等性校验‌:使用缓存存储 Idempotency-Key,确保同一标识在一定时间内只能处理一次。

‌用户体验‌:提交时显示加载提示,防止用户误操作。

注意事项:

Idempotency-Key 生成规则需保证唯一性,建议结合时间戳和随机数。

缓存时间(如300秒)需根据业务场景调整。

需在 UniApp 项目中安装 uni-app 的请求拦截器插件。

相关推荐
游戏开发爱好者87 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
程序员agions9 小时前
2026年,微前端终于“死“了
前端·状态模式
2501_915106329 小时前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview
2501_915106329 小时前
使用 Sniffmaster TCP 抓包和 Wireshark 网络分析
网络协议·tcp/ip·ios·小程序·uni-app·wireshark·iphone
宠友信息11 小时前
2025社交+IM及时通讯社区APP仿小红书小程序
java·spring boot·小程序·uni-app·web app
“负拾捌”11 小时前
python + uniapp 结合腾讯云实现实时语音识别功能(WebSocket)
python·websocket·微信小程序·uni-app·大模型·腾讯云·语音识别
源力祁老师1 天前
深入解析 Odoo 中的 return 特殊用法-Odoo Action 的本质
状态模式
局外人LZ1 天前
Uniapp脚手架项目搭建,uniapp+vue3+uView pro+vite+pinia+sass
前端·uni-app·sass
前端不太难1 天前
HarmonyOS 游戏中,被“允许”的异常
游戏·状态模式·harmonyos
2501_915918411 天前
在 iOS 环境下查看 App 详细信息与文件目录
android·ios·小程序·https·uni-app·iphone·webview