重定向视图后会话仍然提交

Session still submitted after redirecting view

我正在使用 Laravel 5.8 开发一个在线商店项目,在这个项目中我添加了一个复选框来检查用户是否想通过他的在线钱包支付价格:

<input class="form-check-input" type="checkbox" name="pay_wallet" value="1" id="defaultCheck2">
<label class="form-check-label small mr-3" for="defaultCheck2">
    Pay with Wallet
</label>

然后在控制器中,如果用户选中了复选框,我添加了这个用于提交会话:

try {
   if ($request->pay_wallet == '1') {
      Session::put('wallet', 'payment');
      return redirect()->back();
   }
}catch (\Exception $e) {
   dd($e);
}

然后在视图中,我尝试了这个:

@php
if(session('wallet')){
    $us_id = Auth()->user()->usr_id;
    $user_wallet = App\UserWallet::where('user_id', $us_id)->get();
    foreach($user_wallet as $uw){
        echo "
        <ul>
            <li>$uw->id</li>
            <li>$uw->balance</li>
        </ul>
        ";
    }
}
@endphp

基本上我在这里需要做的是检查,如果会话 wallet 被提交,根据他的用户 ID 显示所有可用的钱包。

但现在的问题是,当我刷新页面时,它仍然显示钱包。这意味着会话 wallet 仍然存在!

我该如何解决这个问题?

首先,当我们设置会话时,它会保持值直到会话被销毁或者你使用Session::forget('wallet')。但是您只需要在加载页面后才可用。

为此,您可以使用 Laravel 会话可用的 Flash 消息。将您的代码替换为:

try {
   if ($request->pay_wallet == '1') {
      return redirect()->back()->with(['wallet'=>'payment']);
   }
}catch (\Exception $e) {
   dd($e);
}

在那之后,当你像那样设置钱包标志时。只有在您设置后第一次可用,然后它会自动删除:)