Laravel 5路由前缀

时间:2015-11-08 11:47:37

标签: php laravel-5

我想要一个以国家/地区为前缀的路线。像这样:

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

我的想法是这样做:

<?php

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

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

任何提示?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

实现此目的的一种方法是使用Request外观的segment功能:

$country = Request::segment(1);
相关问题