【问题标题】:Laravel 5.8: Request session does not seem to setting the session at ControllerLaravel 5.8:请求会话似乎没有在控制器上设置会话
【发布时间】:2021-10-16 16:42:21
【问题描述】:

我的请求会话似乎没有在控制器中设置会话。正如你所说的$request->session()->flash('charge_wallet',$wallet); 所见,我尝试设置会话charge_wallet

然后在视图中,bankGateWay.getToken,我尝试检查会话是否存在。但它以某种方式返回不存在!那么这里出了什么问题呢?我该如何解决这个问题?

控制器

public function chargeWallet(Request $request, $wallet, $user)
{
    try {
        $data = $request->validate([
            'charge' => 'required|integer|min:1000',
        ]);

        $payment = Payment::create([
            'pay_type_id' => '191',
            'pay_date' => jdate()->format('Y/m/d'),
            'pay_amount' => $data['charge'] * 10,
            'pay_ord_id' => '',
            'pay_status_id' => '181',
            'pay_creator_id' => auth()->user()->usr_id,
        ]);

        $request->session()->flash('charge_wallet', $wallet); // Setting Session

        $sendInformation = new BankGateWay($payment->pay_id, 
            $payment->pay_amount, $payment->created_at->timestamp,
            route('returnFromGateCharge'));
        
        return view("bankGateWay.getToken", compact('sendInformation'));
    } catch (\Exception $e) {
        return redirect()->back()->with('error', 'Wrong Data');
    }
}

查看

@if(Session::has('charge_wallet'))
    @dd('exists');
@else
    @dd('not exists');
@endif

【问题讨论】:

    标签: php laravel laravel-5.8 laravel-session


    【解决方案1】:
    public function chargeWallet(Request $request, $wallet, $user)
        {
            try {
                $data = $request->validate([
                    'charge' => 'required|integer|min:1000',
                ]);
    
                $payment = Payment::create([
                    'pay_type_id' => '191',
                    'pay_date' => jdate()->format('Y/m/d'),
                    'pay_amount' => $data['charge'] * 10,
                    'pay_ord_id' => '',
                    'pay_status_id' => '181',
                    'pay_creator_id' => auth()->user()->usr_id,
                ]);
    
                $sendInformation = new BankGateWay($payment->pay_id, $payment->pay_amount, $payment->created_at->timestamp, route('returnFromGateCharge'));
                return view("bankGateWay.getToken", compact('sendInformation'))->with('charge_wallet',$wallet);
            }catch (\Exception $e) {
                return redirect()->back()->with('error', 'Wrong Data');
            }
        }
    

    【讨论】:

      【解决方案2】:

      实际上正如Laravel documentation 所说,您可以将它用于下一个请求,例如重定向之后。

      使用此方法存储在会话中的数据将可用 立即和在随后的 HTTP 请求期间。之后 后续 HTTP 请求,刷出的数据将被删除。

      但是在您的代码中,您希望在视图中显示它,这在同一个请求中被考虑。对于当前请求,您应该使用now 方法。

      $request->session()->now('charge_wallet',$wallet');
      

      如果要设置更长的时间,请使用put方法。

      $request->session()->put('charge_wallet',$wallet');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-20
        • 1970-01-01
        相关资源
        最近更新 更多