将语言环境添加到 laravel 资源路由

Posted

技术标签:

【中文标题】将语言环境添加到 laravel 资源路由【英文标题】:Add locale to laravel resource route 【发布时间】:2021-10-15 22:52:27 【问题描述】:

我有以下路线,期望前缀中的语言环境

Route::group(['prefix' => 'locale/admin', 'where' => ['locale' => '[a-zA-Z]2'], 'middleware' => 'setlocale'], function() 
    Route::resource('/profile', 'Admin\ProfileController', ['except' => ['edit', 'create', 'destroy', 'show', 'store']]);
);

最后的路线应该是这样的:

www.example.com/en/admin/profile
and
www.example.com/en/admin/profile/1

虽然我可以获得索引路由www.example.com/en/admin/profile,但我无法获得更新路由www.example.com/en/admin/profile/1,而是我有这个

www.example.com/1/admin/profile/en

这是我的路由在刀片中的定义方式

// Return index route correctly
route('profile.index', app()->getLocale())

//And 

route('profile.update', [$user->id, app()->getLocale()])
// Return update route wrong as I mentioned above.

我的问题是:我应该如何定义我的更新路线以返回正确的 url?

【问题讨论】:

【参考方案1】:

您以错误的顺序传递参数。您需要先发送locale,然后再发送$user->id

 route('profile.update', [app()->getLocale(), $user->id]) 

【讨论】:

以上是关于将语言环境添加到 laravel 资源路由的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5.3 中获取当前的语言环境

Laravel 5.0.* 中间件在处理路由之前从 url 中删除前缀语言环境

Laravel - 忘记参数

Laravel 在区域设置更改时重定向到路由

Symfony 3 将所有路由重定向到当前语言环境版本

Nuxt + Laravel 上的多语言站点,带有来自后端的语言环境