【问题标题】:Laravel 5.2 implicit route model binding using uuid string as idLaravel 5.2 使用 uuid 字符串作为 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

【问题讨论】:

    标签: php laravel 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();,它们将被单数化。
    猜你喜欢
    • 2016-06-04
    • 2017-01-12
    • 2019-01-10
    • 2017-01-26
    • 2015-12-08
    • 2018-01-08
    • 2016-06-10
    • 2021-02-20
    • 2016-12-21
    相关资源
    最近更新 更多