【问题标题】:Laravel: How to create correct routes group for localization?Laravel:如何为本地化创建正确的路由组?
【发布时间】:2018-03-20 09:20:54
【问题描述】:

现在我编写了示例路线,没有为我的 Laravel 项目进行本地化分组:

Route::get('/{lang?}', function($lang=null){
    App::setlocale($lang);
    return view('welcome');
});

如何在 Laravel 5.6 中为多个带有前缀或带有参数而不是前缀或域路由的语言正确创建路由组?并且可以在前缀和域路由示例中创建本地化:

http://website.com/en
http://en.website.com

【问题讨论】:

  • 当有人遇到答案时标记我,这对我来说很有趣(不知道 sry)
  • @abr 你看到投票人字形下方的小星星这就是你如何为问题添加书签;);关于 OP;你可以通过包来实现,比如github.com/mcamara/laravel-localization。如果您想自己推出,则必须使用中间件。
  • 好的,我会告诉你@abr
  • 也许这会有所帮助:stackoverflow.com/questions/28482985/…

标签: laravel laravel-5.6


【解决方案1】:

这是我最好的尝试:

将所有路线定义保存在例如web.php

然后您可以在RouteServiceProvider 中使用多域路由:

Route::group([ 
    'domain' => '{lang}.example.com'
    'middleware' => LangMiddleware::class,
    'namespace' => $this->namespace // I guess?
], function ($router) {
     require base_path('routes/web.php');
});

此外,使用相同的路由还可以做前缀路由组:

Route::group([
        'middleware' => LangMiddleware::class,
        'namespace' => $this->namespace,
        'prefix' => {lang} //Note: This works but is undocumented so may change
], function ($router) {
    require base_path('routes/stateless.php');
});

这一切都依赖于 LangMiddleware 中间件类,它可以是:

class LangMiddleware {
     public function handle($request, $next) {
          if ($request->route("lang")) {
               // also check if language is supported?
              App::setlocale($request->route("lang"));
          }
          return $next($request);          
     }         
}

【讨论】:

    【解决方案2】:

    您可以在路由中使用组来管理多个路由,然后在它们上应用中间件等功能。例如:

    Route::group([ 'middleware' => 'name', 'namespace' => 'prefix' ], function($router){
        $router->get('/xyz','Controller@function);
    });
    

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 2014-07-18
      • 2014-01-27
      • 2016-03-30
      • 2019-06-03
      相关资源
      最近更新 更多