2017-03-28 48 views
1

刀片內部 - welcome.blade.php如何在Laravel 5.4中的Route :: group()中設置語言(locale)?

<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());我可以看到由URL 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');    
    }); 
}); 

這是我有:

回聲$ 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 return view('welcome');給我404沒有找到

return view('welcome');給了我404未找到

,當我運行

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

問題是Route::group只是一個包裝器來組織和分組其他路由。它不是一個定義的網址。 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'); 
     });    
    }); 
}); 
+0

哎@Carlos它的工作原理。謝謝 – zwitterion