Laravel 5路由前缀


Laravel 5 route prefix

我想要一条以国家为前缀的路线。像这样:

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

我的想法是这样做:

<?php
Route::group([
    'prefix' => '{country}'
], function() {
    Route::get('shop', 'ShopController@Index');
    // ...
});

这是有效的。我的问题是,我想为每个子路由自动加载Country,并能够从控制器和视图中使用它。

有什么提示吗?

我提出的解决方案依赖于特定的中间件。

<?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' => 'HomeController@getIndex']);
    // ...
}

以及中间件。

<?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无处不在。

实现这一点的一种方法是使用Request立面的分段函数:

$country = Request::segment(1);