2016-06-12 121 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