首页 > 解决方案 > 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');. 它只是重试相同的方法并且验证失败,将我返回到带有验证错误的结帐页面。

我可以做些什么来确保所有方法都运行或完全停止运行?

编辑:请注意,这只发生在我多次单击提交按钮时!如果我只单击一次,该方法将正确运行。

标签: phplaravelformsvalidationrequest

解决方案


删除之前use \Cart

您可以使用Cart::delete() or Cart::where(....)->delete()


推荐阅读