【问题标题】:How to set locate on all grouped routes in Laravel如何在 Laravel 中的所有分组路线上设置定位
【发布时间】:2020-04-17 12:20:05
【问题描述】:

我正在使用 Laravel,并且我已经将所有路由都用于仪表板 所以我想用这样的 url 改变语言:

http://localhost:8000/ar/dashboard/shop/dashboard-shop http://localhost:8000/fa/dashboard/shop/dashboard-shop http://localhost:8000/en/dashboard/shop/dashboard-shop

    Route::namespace('Dashboard')->prefix('{locale}/dashboard')-

>middleware('auth')->group(function ($locale) {
        .
        .
        .
        .
        .
    }

但它没有将 $locate 作为字符串 "en" 或 "fa" 它给了我这个对象

Illuminate\Routing\Router {#26 ▼
  #events: Illuminate\Events\Dispatcher {#27 ▶}
  #container: Illuminate\Foundation\Application {#2 ▶}
  #routes: Illuminate\Routing\RouteCollection {#29 ▶}
  #current: null
  #currentRequest: null
  #middleware: array:9 [▶]
  #middlewareGroups: array:2 [▶]
  +middlewarePriority: array:6 [▶]
  #binders: []
  #patterns: []
  #groupStack: array:2 [▶]
}

【问题讨论】:

    标签: php laravel localization


    【解决方案1】:

    参数不会传递给group 回调函数。 Router 被传入:

    ->group(function ($router) { ... });
    

    因此,如果您愿意,您可以通过闭包内的对象直接调用Router 来定义您的路线。

    如果您想获取路由参数,您必须在路由匹配并通过管道分派之后在中间件或控制器中执行此操作。在定义路由(您的路由文件)时,还没有发送任何内容,这些只是定义。

    所有这些都在路由匹配和分派之前运行,因此此时没有参数。

    您应该制作一个中间件,从请求的路由参数中获取语言环境并根据需要进行分配。

    【讨论】:

    • 所以如果我想首先使用中间件,我必须这样做 Route::get('setlocale/{locale}',function($lang){ \Session::put('locale ',$lang); 返回重定向()->back(); });但我的路线是组,我想为此设置前缀
    • 你为什么需要重定向回某个东西......中间件可以分配给你当前拥有的组,然后你可以在中间件中获取语言环境并将其分配给需要的东西,然后就可以了让请求通过,所有路由都将采用该参数,因此您可以让中间件忘记该路由参数,因此不必将其传递给这些路由的每个控制器方法
    • 不不,那是一个示例代码。会议很重要。我必须使用用户使用的位置变量设置会话,例如 fa en 和 ... 使用 $lang 但是当我在 dd() 中使用 $lang 时,它给我的对象是 top 而不是“en”或“fa”或 .. ..
    • 当你在哪里执行这个?代码不会在路由文件中运行,它们只是用于注册路由
    • 好的,如果没有 $locale,我怎样才能找到用户想要显示的语言?
    【解决方案2】:

    您可以通过

    检索任何路由器参数
    request(‘locale’)
    

    另一个选项,而不是为所有路由添加前缀,您可以通过检查 ?locale 是否存在然后更改语言环境来从中间件处理本地化

    【讨论】:

    • 这给了我 null
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 2016-05-09
    • 2020-07-20
    • 2019-06-18
    • 1970-01-01
    • 2018-03-19
    相关资源
    最近更新 更多