Как словить данные сессии в контроллере Laravel?

На сайте пишу функционал по работе с несколькими регионами.

Вьюшка:
@if(session()->has('city'))
        {{ session('city') }}       

        @else
            {{session(['city' => 'Base City'])}} //если пользователь впервые зашел на сайт, ставит базовый город
            {{ session('city') }}

        @endif


Контроллер где устанавливается сессия через route и всё работает впоследствии:
public function set(Request $request)
    {

        $city = $request->get('city'); //забирает данные установленные во вьюшке

        session()->put('city', $city); //ставит обновленные данные в сессию

        if (session()->has('city')) {

            return redirect()->back();
        }
            echo 'Some kind of bug with the sessions of the cities';

    }


Теперь мне нужно в другом контроллере вызвать сессию, что бы в соответсвии с городом выдать нужные предложения, однако как я это не делаю, возвращает null

Пробывал так:
$region = session('city');

Так:
$region = session()->get('city');

Но все равно в дебагере показывает null.

Что делаю не так?
  • Вопрос задан
  • 906 просмотров
Решения вопроса 1
@backEndDeveloper
Зачем вы логику пишете во вьюхах?

Я бы такую общую логику вынес на уровень middleware
public function handle($request, Closure $next)
{
$request->session()->get('city', 'default');
/* логика с переменной $city */
    view()->share(['city' => $city]); 

    return $next($request);
}


Тогда у вас сразу во вью будет приходить {{ city }}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ART_CORP
Hard work
use Session;

Session::get('city');
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы