Laravel - 使用 json 字段自定义路由模型绑定中的键
Laravel - Customize the key in the route model binding with json field
我想自定义路由模型绑定中的键,我做了这样的事情 -
use App\Models\Post;
Route::get('/posts/{post:slug}', function (Post $post) {
return $post;
});
但我的 slug 是一个 json 多语言字段并保存这样的数据 -
{
'en': 'hello'
'ru': 'привет',
'de': 'hallo',
}
我已经有一个机制来检索子域并将相应的前缀分配给某个 $subdomain 变量,所以我已经知道我应该从数据库中获取哪种语言,但是我如何将这个 $subdomain 嵌入路由本身?像 -
Route::get('/posts/{post:slug->$subdomain}', function (Post $post) {
return $post;
});
我什至尝试将整个路线放入预定义的字符串中 -
$post_url = '/posts/{post:slug->'.$subdomain.'}';
Route::get($post_url, function (Post $post) {
return $post;
});
而且它还导致不断出现 404 错误。
我做错了什么?
- 不用说,仅通过 ID 检索帖子时,即使是非多语言 slug,它也能完美运行。问题始于这些 JSON 字段。
我的解决方案是像这样在 RouteServiceProvide.php
中显式绑定此路由 -
Route::bind('post', function ($value) {
$slug = "slug->".$subdomain;
return Post::where($slug, $value)->firstOrFail();
});
然后我可以轻松访问任何语言版本的post。
我想自定义路由模型绑定中的键,我做了这样的事情 -
use App\Models\Post;
Route::get('/posts/{post:slug}', function (Post $post) {
return $post;
});
但我的 slug 是一个 json 多语言字段并保存这样的数据 -
{
'en': 'hello'
'ru': 'привет',
'de': 'hallo',
}
我已经有一个机制来检索子域并将相应的前缀分配给某个 $subdomain 变量,所以我已经知道我应该从数据库中获取哪种语言,但是我如何将这个 $subdomain 嵌入路由本身?像 -
Route::get('/posts/{post:slug->$subdomain}', function (Post $post) {
return $post;
});
我什至尝试将整个路线放入预定义的字符串中 -
$post_url = '/posts/{post:slug->'.$subdomain.'}';
Route::get($post_url, function (Post $post) {
return $post;
});
而且它还导致不断出现 404 错误。 我做错了什么?
- 不用说,仅通过 ID 检索帖子时,即使是非多语言 slug,它也能完美运行。问题始于这些 JSON 字段。
我的解决方案是像这样在 RouteServiceProvide.php
中显式绑定此路由 -
Route::bind('post', function ($value) {
$slug = "slug->".$subdomain;
return Post::where($slug, $value)->firstOrFail();
});
然后我可以轻松访问任何语言版本的post。