Переменная сеанса не отправляется в Laravel 5

#php #laravel #laravel-5 #session-variables

#php #laravel #laravel-5 #переменные сеанса

Вопрос:

У меня есть приложение Laravel, и происходит что-то странное, связанное с переменными сеанса. У меня есть метод в контроллере, который проверяет некоторые входные данные и в зависимости от некоторых условий решает, продолжить или просто вернуться обратно (и прямо здесь, где моя проблема), когда я делаю return redirect()->back() , я хочу, чтобы отправить переменную, которая является Json, поэтому вкратце у меня есть это:

 $msg=json_encode([
     'status' => 'failed',
     'field'=>'mail'
 ]);
return redirect()->back()->with('msg',$msg);
 

Итак, он перенаправляет очень хорошо, но затем в представлении, которое я имею:

 @if ( Session::has('msg') )
   //come stuffs
@endif
 

Но, похоже msg , переменная не передается. Согласно документации Laravel при использовании redirect back переменные доступны через Session

Комментарии:

1. Посмотрите свой журнал доступа. Это мигает данными только для следующего запроса, и если любая страница, на которую вы перенаправляете обратно, также перенаправляется куда-то, вы в конечном итоге потеряете эти данные.

Ответ №1:

Это работает для меня, когда я тестировал. Возможно, ваш сеанс не хранит данные. Пожалуйста, проверьте, работает ли ваш сеанс или нет. Мой протестированный результат

    @if ( Session::has('msg') )
       {{ session('msg') }}
    @endif 
 

введите описание изображения здесь

Комментарии:

1. да, просто проверка, вероятно, заключается в том, что проблема заключается в том, что я использую веб-промежуточное программное обеспечение

Ответ №2:

Я также столкнулся с этой проблемой в проекте некоторое время назад с Laravel 5.2. Я не знаю, ошибка ли это или она была исправлена, но в итоге я обошел ее, не используя redirect()->back() . Я думаю, это может быть связано с механизмом кэширования браузера. Мне было бы интересно, если вы в конечном итоге найдете причину.

Ответ №3:

Я думаю, вам нужно использовать $request->session()->put('key', 'value'); , прежде чем инициировать перенаправление

прочитайте документацию на сеансе HTTP

Комментарии:

1. не могли бы вы сделать что-то вроде if (isset( $request->session()->get( 'key' ))) {}

2. да, я написал это сразу после put $request->session()->put('key', 'value'); , и оно существует, но затем в представлении оно больше не существует

3. вы должны поместить оператор if в свое представление

4. уххх ок, undefined variable $request

5. но я попробовал @if (! Session::has('message') ) , и он вошел, поэтому он не сохраняет переменную сеанса