Laravel 5.2 使用 uuid 字符串作为 id 的隐式路由模型绑定
Posted
技术标签:
【中文标题】Laravel 5.2 使用 uuid 字符串作为 id 的隐式路由模型绑定【英文标题】:Laravel 5.2 implicit route model binding using uuid string as id 【发布时间】:2016-07-05 10:21:40 【问题描述】:我正在设置一个新的 laravel 安装,并且在使用 uuid 作为 id 时遇到了隐式路由模型绑定的问题。
我的路线:
Route:group(['prefix' => 'admin'], function()
Route:resource('users', 'Admin\UserController');
);
Admin\UserController的show方法:
public function show(App\User $user)
dd($user);
所以当我点击 URL my.app/admin/users/long-uuid-string-here
时,我希望看到用户信息,但我得到一个空的用户对象。
当我将以下内容添加到 RouteServiceProvider 时,它按预期工作:
$router->model('admin/users', \App\User::class);
有什么我遗漏的吗,隐式模型绑定是否需要一个整数?是因为它在路由组中还是其他什么?
是的!id存在于数据库中,我使用的是laravel 5.2
【问题讨论】:
【参考方案1】:由于你使用的是资源路由,所以路由会是这样的:
Route::get('admin/users/users', 'Admin\UserController@show');
注意users
变量。是复数。所以在你的 show 方法中:
改变这个:
public function show(App\User $user)
dd($user);
到
public function show(App\User $users)
dd($users);
这有点奇怪,但这就是问题所在。
【讨论】:
我使用的是id列中的uuid 你在哪里注册你的$router->model()
方法?
在RouteServiceProvider的启动方法中。如果我以这种方式明确声明它就可以工作,我想知道为什么它不能隐式工作。按照你的推理,我想这一定与它在一个前缀组中的事实有关?
@BenHarvey:找到问题并发布解决方案。
如果您不喜欢路由名称和参数中的复数表示法,您可以在您的routes.php
中添加Route::singularResourceParameters();
,它们将被单数化。以上是关于Laravel 5.2 使用 uuid 字符串作为 id 的隐式路由模型绑定的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel 关系 orm 时 UUID 二进制(16)的问题