隐式路由模型绑定

Son*_*nny 1 php laravel laravel-routing laravel-5 laravel-5.6

Laravel 的隐式路由模型绑定不起作用。它不查找标识符指示的记录。我得到了一个全新的模型对象。

鉴于此代码:

Route::get('users/{user}', function (App\User $user, $id) {
    $user2 = $user->find($id);
    return [
        [get_class($user), $user->exists, $user],
        [get_class($user2), $user2->exists],
    ];
});
Run Code Online (Sandbox Code Playgroud)

还有这个网址: /users/1

我得到这个输出:

[["App\\User",false,[]],["App\\User",true]]
Run Code Online (Sandbox Code Playgroud)

我使用的是 PHP 7.2 和 Laravel 5.6。


附加信息

我已经在其他 Laravel 项目中成功完成了隐式路由模型绑定。我正在处理现有的代码库。据我所知,该功能以前没有使用过。

用户记录存在。它没有被软删除。该模型不使用SoftDeletes特征。

我已经尝试过使用各种独特的路线名称和其他模型。

我已经检查了App\Http\Kernel课堂上常见的罪魁祸首。$middlewareGroups具有\Illuminate\Routing\Middleware\SubstituteBindings::class,web部分和$routeMiddleware包含'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,

Mar*_*łek 6

它在 Laravel 中应该没有任何问题。我刚刚在我的 Laravel 5.6 应用程序中验证了它,这没有问题。

可能的情况,为什么你会得到这个:

  • 用户被软删除
  • 此路由不在内部web.phpapi.php文件中 - 两个组都在文件中设置bindings(或\Illuminate\Routing\Middleware\SubstituteBindings::class)内部$midddlewareGroups属性app/Http/Kernel.php
  • 您从这些组之一中删除了提到的绑定
  • 您已经设置了一些自定义绑定。例如,如果您定义了这样的代码: Route::bind('user', function($user) { return new \App\User(); });

    那么你会得到你展示的结果,因为你使用自定义逻辑并且只返回空的用户模型。

如果您认为以上所有内容都是错误的,我将从新的 Laravel 5.6 应用程序开始,尝试重现该问题。