2016-06-12 53 views
1

我試圖在Laravel中創建語言環境切換器。Laravel中的語言環境不變

當用戶登錄,切換效果很好,但是當客人,什麼也沒發生,我無法找到的bug ......

這裏是我的文件:

在我登錄觀,我有我的切換:

<ul class="dropdown-menu"> 
       <li><a class="mexico" href="{{ URL::action('[email protected]', 'es') }}"> 
         <img src="/images/flags/MX.png" alt="Español"> Español</a></li> 
       <li><a class="english" href="{{ URL::action('[email protected]', 'en') }}"> 
         <img src="/images/flags/GB.png" alt="English"> English</a></li> 
      </ul> 

這裏是我的LanguageController:

class LanguageController extends Controller 
{ 

    public function update($locale){ 
     if(Auth::check()){ 
      Auth::user()->locale = $locale; 
      Auth::user()->save(); 
     } 
     Lang::setLocale($locale); 
     app()->setLocale($locale); 
     return redirect()->back(); 

    } 
} 

我routes.php文件

Route::get('lang/{lang}', '[email protected]'); // This is outside any middleware 

我有一個全球性的中間件處理區域設置:

public function handle($request, Closure $next) 
{ 
     if (Auth::check()) { 
      app()->setLocale(Auth::user()->locale); 
     } 
     else { 
      $locale = Lang::getLocale(); 

      app()->setLocale($locale); 
     } 
    return $next($request); 
} 

如果用戶登錄,現場被存儲在數據庫,否則,應用區域設置了......

默認語言環境是西班牙語。

當我嘗試選擇英語時,它什麼都不做。

dd(Lang::getLocale()); 

給我「恩」在LanguageController所以,它應該工作的結束,但如果我把這個同一行

dd(Lang::getLocale()); 

在登錄視圖(它會返回重定向後回到那裏() - > back();),它給我「es」

我不明白爲什麼!

任何想法???

編輯:

當我更換:

return redirect()->back(); 

return view ('auth/login'); 

它的工作原理。

擴展,看來,當我使用重定向(),它會失敗......仍然不知道如何解決它。

回答

0

這是我如何解決它:

class LanguageController extends Controller 
    { 

     public function update($locale) 
     { 
      if (Auth::check()) { 
       Auth::user()->locale = $locale; 
       Auth::user()->save(); 
      } 
      Session::put('locale', $locale); 
      return redirect()->back(); 


     } 
    } 

LocaleMiddleware:

class LocaleMiddleware 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 

    protected $languages = ['en', 'es']; 


    public function handle($request, Closure $next) 
    { 
     if (Session::has('locale') && in_array(Session::get('locale'), $this->languages)) { 
      App::setLocale(Session::get('locale')); 
     } 

     return $next($request); 
    } 
} 

靈感上this post