内部刀片 - 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()
解决此问题?
答案 0 :(得分:2)
问题是Route::group
只是组织和分组其他路由的包装器。它不是定义的URL。 Route::group
和Route::post/get
不能正常工作,因此您无法将逻辑置于Route::group
电话中。
您可以做的是以下
Route::group(['prefix'=>'welcome'], function (){
Route::group(['prefix'=>'{lang}'], function (){
Route::get('/', function ($lang) {
App::setLocale($lang);
return view('welcome');
});
});
});