Локализация 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 ответа:
Добавьте
\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, ];