我正在尝试在Laravel中创建一个Locale切换器。
当用户登录时,切换台运行良好,但是当客人没有任何反应时,我找不到错误...
以下是我的文件:
在我的登录视图中,我有我的切换台:
<ul class="dropdown-menu">
<li><a class="mexico" href="{{ URL::action('LanguageController@update', 'es') }}">
<img src="/images/flags/MX.png" alt="Español"> Español</a></li>
<li><a class="english" href="{{ URL::action('LanguageController@update', '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}', 'LanguageController@update'); // This is outside any middleware
我有一个处理Locale的全局中间件:
public function handle($request, Closure $next)
{
if (Auth::check()) {
app()->setLocale(Auth::user()->locale);
}
else {
$locale = Lang::getLocale();
app()->setLocale($locale);
}
return $next($request);
}
如果记录了用户,则语言环境存储在db中,否则,应用语言环境已设置...
默认情况下,Locale是西班牙语。
当我尝试选择英语时,它什么也没做。
dd(Lang::getLocale());
在LanguageController的末尾给我“en”,所以,它应该可以工作,但如果我把这一行放在同一行
dd(Lang::getLocale());
在登录视图中(它会在返回redirect() - &gt; back();)之后返回那里,它给了我“es”
我不明白为什么!!!
任何想法???
编辑:
当我替换:
return redirect()->back();
带
return view ('auth/login');
它有效。
扩展一下,似乎当我使用redirect()时,它会失败......仍然不知道如何解决它。
答案 0 :(得分: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);
}
}