如何在Laravel 5.4中设置Route :: group()中的语言(语言环境)?

时间:2017-03-28 20:34:11

标签: laravel routes

内部刀片 - welcome.blade.php

 <div class="links">
      <a href="https://laravel.com/docs">{{ __('passwords.reset') }}</a>
 </div>

web.php内。

如果我跑:

Route::get('/', function () {
    return view('welcome');
});

我得到了正确的欢迎刀片页面,其中包含正确的翻译。

另一条路线:

Route::get('welcome/{lang}', function ($lang) {
//    echo $lang;
//    dd(Lang::getLocale());
    App::setLocale($lang);
    //dd(Lang::getLocale());
    return view('welcome');    
    //
});

如果我运行dd(Lang::getLocale());,我可以看到网址http://testapp/welcome/en发送的语言正确。在这种情况下'en'。如果我将dd()置于评论中,我可以在Laravel欢迎页面中看到正确的翻译。

但是当我运行这段代码时:

Route::group(['prefix'=>'welcome'], function (){    
    Route::group(['prefix'=>'{lang}'], function ($lang){
        //echo $lang;
        //dd(Lang::getLocale());
        App::setLocale($lang);
        //dd(Lang::getLocale());
        return view('welcome');            
    });
});

这就是我所拥有的:

echo $ lang; 给了我ErrorException in web.php line 30: Object of class Illuminate\Routing\Router could not be converted to string

dd(Lang :: getLocale()); 给了我'en'

App :: setLocale($ lang); 给我404 Not Found

App :: setLocale($ lang); AND 返回视图('welcome'); 给我404 Not Found

返回视图('welcome'); 给我404 Not Found

当我跑步时

App::setLocale($lang);
dd(Lang::getLocale());
return view('welcome');

我得到一个对象:

Router {#21 ▼
  #events: Dispatcher {#23 ▶}
  #container: Application {#3 ▶}
  #routes: RouteCollection {#25 ▶}
  #current: null
  #currentRequest: null
  #middleware: array:6 [▶]
  #middlewareGroups: array:2 [▶]
  +middlewarePriority: array:6 [▶]
  #binders: []
  #patterns: []
  #groupStack: array:3 [▶]
}

所以,我的猜测是Route::group(['prefix'=>'{lang}'...返回一个对象而不是一个字符串。这就是崩溃过程的原因。

如何使用Route::group()解决此问题?

1 个答案:

答案 0 :(得分:2)

问题是Route::group只是组织和分组其他路由的包装器。它不是定义的URL。 Route::groupRoute::post/get不能正常工作,因此您无法将逻辑置于Route::group电话中。

您可以做的是以下

Route::group(['prefix'=>'welcome'], function (){    
    Route::group(['prefix'=>'{lang}'], function (){
        Route::get('/', function ($lang) {
            App::setLocale($lang);
            return view('welcome');
        });            
     });
});