2015-11-08 175 views
4

我想有一個國家的前綴路線。就像這樣:Laravel 5路線前綴

/us/shop 
/ca/shop 
/fr/shop 

我的想法是這樣做的:

<?php 

Route::group([ 
    'prefix' => '{country}' 
], function() { 
    Route::get('shop', '[email protected]'); 
    // ... 
}); 

這工作。我的問題是,我想爲每個子路徑自動加載Country,並且能夠從控制器以及視圖中使用它。

任何提示?實現這一

+0

那些國家不會有不同的語言嗎? –

+0

@ dan-klasson它更多的是一個通用的問題,但我們可以假設他們會。 – greut

+1

那麼爲什麼不直接使用Laravel Localization呢? –

回答

1

的解決方案,我想出了依賴於特定的中間件。

<?php 

Route::get('', function() { 
    return redirect()->route('index', ['language' => App::getLocale()]); 
}); 

Route::group([ 
    'prefix' => '{lang}', 
    'where' => ['lang' => '(fr|de|en)'], 
    'middleware' => 'locale' 
], function() { 

    Route::get('', ['as' => 'index', 'uses' => '[email protected]']); 

    // ... 

} 

和中間件。

<?php 

namespace App\Http\Middleware; 

use App; 
use Closure; 
use View; 

class Localization { 
    public function handle($request, Closure $next) { 
     $language = $request->route()->parameter('lang'); 

     App::setLocale($language); 

     // Not super necessary unless you really want to use 
     // number_format or even money_format. 
     if ($language == "en") { 
      setLocale(LC_ALL, "en_US.UTF-8"); 
     } else { 
      setLocale(LC_ALL, $language."_CH.UTF-8"); 
     } 

     View::share('lang', $language); 

     return $next($request); 
    } 
} 

正如您可以猜到,此代碼意味着瑞士的應用程序,因此_CH無處不在。

1

一種方法是使用Request門面segment功能:

$country = Request::segment(1);