Локализация laravel


Я пытался обновить язык для веб-сайта.

Контроллер

public function getUpdateLanguage(Request $request) {
        $request_data = $request->all();
         Session::put('locale', $request_data['language']);
        return redirect()->back();
}

Промежуточное по:

 public function handle($request, Closure $next)
 { 
    if ( Session::has('locale')) {
        App::setLocale(Session::get('locale'));
    }
    return $next($request);
 }

Но истинный блок для if ( Session::has('locale')) никогда не выполняется, и язык всегда 'en' и никогда не обновляется. Это прекрасно работает, если я попытаюсь

 public function handle($request, Closure $next)
 { 

     App::setLocale('arabic');

    return $next($request);
 }

Ядро:

protected $middleware = [
        IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode::class,
        IlluminateFoundationHttpMiddlewareValidatePostSize::class,
        AppHttpMiddlewareTrimStrings::class,
        IlluminateFoundationHttpMiddlewareConvertEmptyStringsToNull::class,
        AppHttpMiddlewareTrustProxies::class,
        AppHttpMiddlewareLocalization::class,
    ];
Локализация - это мое промежуточное ПО. Метод контроллера обновления языка перенаправляет на home:
public function getIndex() {
        return view('frontend.home');
}

Может ли кто-нибудь указать мне, где очищается значение сеанса, или если я делаю это неправильно а есть ли лучший способ?

2 2

2 ответа:

Добавьте \Illuminate\Session\Middleware\StartSession::class к вашему массиву middleware в kernel.php:

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\TrustProxies::class,
    \App\Http\Middleware\Localization::class,
];

Вы могли бы сделать что-то подобное

Промежуточное по:

public function handle($request, Closure $next)
 { 
    App::setLocale(
        $request->session()->has('locale') ? 
        $request->session()->get('locale') : 
        App::getLocale()
    );

    return $next($request);
 }