2017-08-01 52 views
0

我在Fresh新項目中苦於Laravel的語言環境。我搜索了很多次,但他們沒有解決我的問題。Laravel 5.4語言環境在使用重定向時恢復爲默認值()

然後我跟着locale in laravel 5.4 returns to the pervious locale after refresh源,但是當我通過視圖

return view('home'); 

調用頁面它只適用它,當我使用路線

return redirect()->route('home'); 

這裏是我不工作文件:

web.php

Route::get('/lang/{locale}', function ($locale) { 
    App::setLocale($locale); 
    Session::put('locale', $locale); 
    //return view('home');       ###### This one works 
    return redirect()->route('home');    ###### Where as this does NOT work 
}); 

Route::get('/', function() { 
    return view('welcome'); 
}); 

Route::get('/home', '[email protected]')->name('home'); 

home.blade.php

<div class="panel-body"> 
    You are logged in! 
    {{__('auth.success')}} 
    <br> 
    <a href="/lang/ru">Rus</a> 
    <br> 
    <a href="/lang/kg">Kgz</a> 
</div> 

ChangeLocale.php中間件(我稱它爲頁面的每個請求)

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

在此先感謝;)

好吧,以後我改

Route::get('/home', '[email protected]')->name('home'); 

Route::get('/home', '[email protected]')->name('home')->middleware('changeLocale'); 

它開始工作。

那麼,爲什麼我的中間件不工作?

我應該將中間件單獨分配給我的所有路由嗎?

+0

創建一個路由組,將中間件應用於「lang/{locale}」以外的路由。 –

回答

1

可以將您的changeLocale中間件添加到webapp/Http/Kernel.php

protected $middlewareGroups = [ 
    'web' => [ 
     ... 
     \Your\ChangeLocateMiddleware::class 
    ], 
    ... 
] 

正如你可以看到app/Providers/RouteServiceProvider.php,這個中間件組適用於所有web路線。

相關問題