@Wiemdier_brenul

Как запустить миддлвар один раз?

У меня есть пакет, который определяет страну юзера по его апи и исходя из этой страны я хочу переключать на нужный язык. Так что я создал миддлвар LocalizationMiddleware и вставил его в список веб миддлваров
protected $middlewareGroups = [
        'web' => [
            ...,
            \App\Http\Middleware\LocalizationMiddleware::class
        ],

Сам миддлвар выглядит так, что я вызваю метод Location::get($ip) и исходя из свойства countryName достаю страну, и через множество if устанавливаю нужный язык:
$currentUserCountry = Location::get($ip);
        $country = $currentUserCountry->countryName;
        if($country == /*страна*/){
            app()->setLocale('/*язык*/');
            session()->put('locale', '/*язык*/');
        }

Проблема в том, что теперь этот миддлвар будет запускаться каждый раз, даже если юзер переключит язык на другой, ему установится тот, который подходит его стране. же хочу, чтобы этот миддлвар (или какая либо функция) вызывался только один раз, когда юзер зайдет на сайт, как это лучше всего реализовать?
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
delphinpro
@delphinpro Куратор тега Laravel
frontend developer
Запускаться он будет каждый раз.
Но ему не нужно каждый раз выполнять определение страны.

if (страна_не_определена) {
  Определяем страну
}

return $next($request);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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