缺少必需的参数 - 具有超过 2 个参数的路由不适用于本地化
Missing required parameter - routes with more than 2 parameters are not working with localization
我最近一直在为这个问题苦苦挣扎,我真的需要一些帮助。
所以我实施了本教程:https://youtu.be/KqzGKg8IxE4 以将本地化添加到我的项目中,它适用于除了语言之外不需要其他参数的路由。我想要做的只是将区域设置保留为 url 作为 link 的第一段,因此它应该遵循以下模式:
- 示例。com/en/shop
- 示例。com/en/products/5/edit
但是参数较多的路由应该不受这个前缀的影响。
我已经找到了更多可能的修复方法,例如删除所有资源分组路由并手动输入它们,这将永远花费,或者覆盖所有路由以便将参数用作语言切换器,例如 ' example.com/shop?lang=en' 然后实现一个 URL 生成器宏,如 .
中所回答
此外,我尝试在 language-switcher 组件中添加一个可选参数,直接在我的 blade 文件中添加
<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 个参数的路由才有效。
所有这些解决方案都很棒,但在我的情况下 none 可以应用,因为正如我之前所说,我的要求是以 的第一段的方式实现本地化link 应该是语言。
我觉得有一种优雅的方法可以解决这个问题,我将不胜感激任何建议,因为我对如何解决这个问题不再有任何想法。
谢谢!
您可以从路由对象中获取当前路由参数,例如:
<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 页面)时不会是正确的。所以需要注意的地方
我最近一直在为这个问题苦苦挣扎,我真的需要一些帮助。
所以我实施了本教程:https://youtu.be/KqzGKg8IxE4 以将本地化添加到我的项目中,它适用于除了语言之外不需要其他参数的路由。我想要做的只是将区域设置保留为 url 作为 link 的第一段,因此它应该遵循以下模式:
- 示例。com/en/shop
- 示例。com/en/products/5/edit
但是参数较多的路由应该不受这个前缀的影响。
我已经找到了更多可能的修复方法,例如删除所有资源分组路由并手动输入它们,这将永远花费,或者覆盖所有路由以便将参数用作语言切换器,例如 ' example.com/shop?lang=en' 然后实现一个 URL 生成器宏,如
此外,我尝试在 language-switcher 组件中添加一个可选参数,直接在我的 blade 文件中添加
<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 个参数的路由才有效。
所有这些解决方案都很棒,但在我的情况下 none 可以应用,因为正如我之前所说,我的要求是以 的第一段的方式实现本地化link 应该是语言。
我觉得有一种优雅的方法可以解决这个问题,我将不胜感激任何建议,因为我对如何解决这个问题不再有任何想法。
谢谢!
您可以从路由对象中获取当前路由参数,例如:
<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 页面)时不会是正确的。所以需要注意的地方