【发布时间】:2021-01-05 00:44:04
【问题描述】:
你好SO的好人!
我有一个关于 Laravel Route 的问题,我无法解决。
在 User.php 模型中我使用 getRouteKeyName() 函数
public function getRouteKeyName()
{
return 'user_name';
}
还有在 Post.php 模型中
public function getRouteKeyName()
{
return 'uuid';
}
在users表中,1条记录
|----------------------------|
| id | ... | user_name | ... |
| 1 |-----| @simple |-----|
在帖子表中
|------------------------------------|
| id | ... | uuid | ... |
| 1 |-----| abcd-123-efg-456 |-----|
在路由中(web.php)
// for post (key: uuid)
Route::group(['prefix' => '{post}'], function () {
Route::get('/', function (Post $post) {
return $post;
});
});
// for users (key: user_name)
Route::group(['prefix' => '{user}'], function () {
Route::get('/', function (User $user) {
return $user;
});
});
假设我们访问 url:www.example.test/@simple/
在调试栏中,我看到查询:
select * from
postswhereuuid= '@simple' 限制 1
我的尝试
[#1] 我将 where 子句放在帖子和用户的路由组中
Route::group([
'prefix' => '{post}',
'where' => [
'post' => '^[a-zA-Z0-9-]{36}$' // I'm not Regex professional
]
], function () {
Route::get('/', function (Post $post) {
return $post;
});
});
Route::group([
'prefix' => '{user}',
'where' => [
'user' => '^(@)[a-zA-Z0-9]$' // I'm not Regex professional
]
], function () {
Route::get('/', function (User $user) {
return $user;
});
});
所以让我们再次访问该网址:www.example.test/@simple
我得到了什么,404
[#2] 我删除了 User 和 post 模型中的 getRouteKeyname
重新访问网址:www.example.test/@simple,仍然得到 404
[#3]我试着把路由模型绑定列名
Route::group([
'prefix' => '{post:uuid}', // This is what I changed
], function () {
Route::get('/', function (Post $post) {
return $post;
});
});
Route::group([
'prefix' => '{user:user_name}', // This is what I changed
], function () {
Route::get('/', function (User $user) {
return $user;
});
});
不过,查询结果还是一样的:> select * from
postswhereuuid= '@simple' limit 1
我想要达到的目标
假设我们访问 url:www.example.test/@simple
获取
user_name为@simple的用户,如果用户不存在,则返回404
帖子也一样
我们访问网址:www.example.test/abcd-1234-efgh-5678
获取
uuid为abcd-1234-efgh-5678的帖子,如果不存在则为 404
问题:
[#1] 如何告诉 Laravel Route:我有 2 个具有不同模型绑定的 Route 组?对不起,如果这个问题有点令人困惑,因为我的英语不是很好
[#2] 我是否在 Laravel 中实现了路由组和路由模型绑定的最佳实践?
提前致谢!
【问题讨论】: