如何在Laravel组路由中使用动态变量?

时间:2018-02-14 09:20:19

标签: laravel laravel-5

例如:

 Route::group(['prefix' => '{lang?}'], function () {
 //..
 });

在中间件中创建变量:

public function handle($request, Closure $next){

$lang = session('locale');

App::setLocale($lang);

return $next($request);      
});

还尝试获取前缀中的数据,但是为空

Route::group(['prefix' =>  config('app.locale')], function () {
//..
});

Route::group(['prefix' =>  session('locale')], function () {
//..
});

通过会话改变语言单独路线

Route::get('setlocale/{locale}', function ($locale) {

session(['locale' => $locale]);

return redirect()->back();

})->name('setlocale');

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

您不需要在lang路线下对路线进行分组,您可以创建自己的中间件并将路线分组到该中间件下,并在其中使用此代码:

public function handle($request, Closure $next){
     $lang = request->get('locale');
     $currentLang = App::getLocale();

     //If locale exists in the url and it's changed
     if($lang && $lang != $currentLang) App::setLocale($lang);

     //If locale doesn't exist in the url, fallback to default locale
     if(!$lang) App::setLocale('en');

     return $next($request);      
 });

网址应为data/store?locale=en,您的网址应始终在网址locale后追加?,否则将使用您的默认locale

编辑:由于您的路由包含locale作为网址的一部分,而不是请求参数,我建议您使用库来为您处理此问题,因为您在你能够有一个有效的例子之前,你会有很多事情要做:Laravel localization mcmara