【发布时间】:2022-01-21 12:59:08
【问题描述】:
我想自定义路由模型绑定中的键,我做了这样的事情-
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 字段。
【问题讨论】:
-
您可能需要在RouteServiceProvider 中编写自定义逻辑。
-
谢谢。我正要回应自己,这就是我最终所做的 -
Route::bind('post', function ($value) { $slug = "slug->".$subdomain; return Post::where($slug, $value)->first() ?? abort(404); }); -
很高兴您找到了解决方案。如果可以,请将其发布为将来参考的答案。