缺少必需参数 - 具有超过 2 个参数的路由无法进行本地化

问题描述 投票:0回答:1

我最近一直在为这个问题苦苦挣扎,我真的需要一些帮助。

因此,我实现了本教程:https://youtu.be/KqzGKg8IxE4,用于将本地化添加到我的项目中,它适用于除了语言之外不需要其他参数的路线。我想要做的只是将 url 的区域设置保留为链接的第一段,因此它应该遵循以下模式:

  • example.com/en/shop
  • example.com/en/products/5/edit

但是参数较多的路由不应受到此前缀的影响。

我已经找到了更多可能的解决方案,例如删除所有资源分组路由并手动键入它们,这将永远花费时间,或者覆盖所有路由以便使用参数作为语言切换器,例如“example.com” /shop?lang=en',然后实现一个 URL 生成器宏,如这个问题中的回答。

此外,我尝试在语言切换器组件中添加一个可选参数,直接在我的刀片文件中添加,就像这样

<language-switcher locale="{{ app()->getLocale() }}" 
     link-fr="{{ route(Route::currentRouteName(), ['locale' => 'fr', 'id' => '/{id?}']) }}" 
     link-en="{{ route(Route::currentRouteName(), ['locale' => 'en','id' => '/{id?}']) }}">
</language-switcher>

但是这里发生的情况是,它只是为没有其他参数的路由添加一个随机 ID,并且只有那些需要 2 个参数的路由才有效。

所有这些解决方案都很棒,但在我的情况下,它们都不能应用,因为正如我之前所说,我的要求是以这样一种方式实现本地化:链接的第一段应该是语言。

我觉得有一种优雅的方法可以解决这个问题,我将不胜感激任何建议,因为我不再有任何关于如何解决这个问题的想法。

谢谢你!

php laravel localization laravel-localization
1个回答
1
投票

您可以从路线对象中获取当前路线参数,如下所示:

<language-switcher locale="{{ app()->getLocale() }}" 
     link-fr="{{ route(Route::currentRouteName(), array_merge(request()->route()->parameters(), [ 'locale' => 'fr' ])) }}" 
     link-en="{{ route(Route::currentRouteName(), array_merge(request()->route()->parameters(), [ 'locale' => 'en' ])) }}">
</language-switcher>

请注意,这假设存在一条匹配的路由,该路由通常为真,但在路由不匹配时显示某些错误页面(例如 404 页面)时,该路由将不为真。所以需要注意一些事情

© www.soinside.com 2019 - 2024. All rights reserved.