php - Laravel 没有完成多个请求的控制器方法
问题描述
我尝试使用 ReCaptcha V3 解决多次单击提交按钮的问题。它的工作原理是数据库插入仅在控制器中运行一次,随后它只是命中验证返回错误。
问题是控制器方法没有完全运行。
例如,如果我多次单击电子商务页面上的提交按钮,在 中CheckoutController
,该checkout
方法不会完全运行。
class CheckOutController extends Controller {
public function checkout(Request $request) {
// Some checkout Logic (insert into database)
$this->validate($request, [
'recaptcha' => ['required', new \App\Rules\Recaptcha]
]);
if (Cart::content()->count() > 0) {
foreach (Cart::content() as $cartItem) {
$insert = new \App\Transaction;
$insert->product_id = $cartItem->id;
$insert->receipt_id = $cartItem->receipt_id;
$insert->quantity = $cartItem->qty;
$insert->price= $cartItem->price;
$insert->save();
}
Cart::destroy(); //last part of checkout logic
return view('finishCheckout');
}
return abort(404);
}
}
因为我在本地工作,所以速度更快,所以请求正在遍历我的代码,将数据插入我的数据库。
有时请求会达到Cart:: destroy();
逻辑的一部分,有时则不会。但我怀疑在生产环境中,代码可能会在该部分之前停止。
而且它永远不会击中return view('finishCheckout');
. 它只是重试相同的方法并且验证失败,将我返回到带有验证错误的结帐页面。
我可以做些什么来确保所有方法都运行或完全停止运行?
编辑:请注意,这只发生在我多次单击提交按钮时!如果我只单击一次,该方法将正确运行。
解决方案
删除之前use \Cart
您可以使用Cart::delete() or Cart::where(....)->delete()
推荐阅读
- postman - 您使用这些参数调用了函数“值选择器”
- .htaccess - 在不破坏结构的情况下使用 .htaccess 屏蔽 URL
- ansible - Ansible playbook 和失败期间的返回值
- drupal - 无法使用 Drush 10 更新 Drupal 9 数据库和语言环境
- javascript - 是否可以在使用测试 ID 获取元素后检查它所在的 html 标签名称?
- javascript - 在 vue js 中录制语音
- python - 为什么这个图像没有正确导入pygame
- string - 有没有办法在 rust 中更新字符串?
- json - GSON - 无法解析抽象类
- segmentation-fault - 找到段错误的真实行