【问题标题】:Laravel 5 route prefixLaravel 5 路由前缀
【发布时间】:2016-03-29 21:07:54
【问题描述】:

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

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

我的想法是这样做:

<?php

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

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

有什么提示吗?

【问题讨论】:

  • 这些国家不是也有不同的语言吗?
  • @dan-klasson 这更像是一个笼统的问题,但我们可以假设他们会。
  • 那为什么不直接使用 Laravel 本地化呢?

标签: php laravel-5


【解决方案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' => '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

【讨论】:

    【解决方案2】:

    实现这一点的一种方法是使用Request门面的segment函数:

    $country = Request::segment(1);
    

    【讨论】:

      猜你喜欢
      • 2016-03-26
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      • 2020-05-17
      • 2019-06-30
      • 2019-09-07
      相关资源
      最近更新 更多