Laravel 5.8: Сеанс запроса, похоже, не устанавливает сеанс в контроллере

#php #laravel #laravel-5.8 #laravel-session

Вопрос:

Мой сеанс запроса, похоже, не устанавливает сеанс в контроллере. Как вы можете видеть , сказав $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
 

Ответ №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, вы можете использовать его для следующих запросов, например, после перенаправления.

Данные, сохраненные в сеансе с использованием этого метода, будут доступны немедленно и во время последующего HTTP-запроса. После последующего HTTP — запроса прошитые данные будут удалены.

Но в своем коде вы хотите показать это в своем представлении, которое рассматривается в том же запросе. Для текущего запроса вы должны использовать now метод.

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

Если вы хотите установить на более длительное время, используйте put метод.

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