我在Laravel的Fresh新项目上苦苦挣扎。我用Google搜索了很多次,但他们没有解决我的问题。
然后我关注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', 'HomeController@index')->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', 'HomeController@index')->name('home');
以
Route::get('/home', 'HomeController@index')->name('home')->middleware('changeLocale');
它开始起作用了。
那么,为什么我的中间件不起作用?
我应该单独为所有路线分配中间件吗?
答案 0 :(得分:1)
您可以在changeLocale
中将web
中间件添加到app/Http/Kernel.php
群组:
protected $middlewareGroups = [
'web' => [
...
\Your\ChangeLocateMiddleware::class
],
...
]
正如您在app/Providers/RouteServiceProvider.php
中看到的那样,此中间件组适用于您的所有web
路由。