使用redirect()时,Laravel 5.4 Locale恢复为默认值

时间:2017-08-01 14:36:57

标签: redirect routes localization laravel-5.4

我在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');

它开始起作用了。

那么,为什么我的中间件不起作用?

我应该单独为所有路线分配中间件吗?

1 个答案:

答案 0 :(得分:1)

您可以在changeLocale中将web中间件添加到app/Http/Kernel.php群组:

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

正如您在app/Providers/RouteServiceProvider.php中看到的那样,此中间件组适用于您的所有web路由。