Laravel 5.5 路由中的模型绑定不起作用

Posted

技术标签:

【中文标题】Laravel 5.5 路由中的模型绑定不起作用【英文标题】:Laravel 5.5 Model binding in routes doesn't work 【发布时间】:2018-05-26 19:15:45 【问题描述】:

在我的routes.php 我有这个:

Route::get('user/user/permissions/','UserController@permissions')->name('user.permissions');

在我的控制器中,我有:

public function permissions(User $user)
   dd($user);

$user 对象(如新用户;没有属性

如果我使用:

public function permissions($user)
   dd(User::find($user));

完美运行!!

我以前有 Laravel 5.2,这段代码工作正常,但在 Laravel 5.5 中它不起作用,有什么想法吗?

【问题讨论】:

您必须确保您传递到您的 URL 的 ID(例如:user/1/permission/在您的数据库中有一个具有该 ID 的用户,否则您将收到 404 HTTP 响应 这是升级吗? 可能是你在顶部缺少use App\User;。如果是这种情况,则它所期望的 User 位于错误的命名空间中。 【参考方案1】:

听起来你从 5.2 升级到了……某个版本。

Laravel 5.3 使用 SubstitueBindings 中间件进行隐式和显式绑定,不再通过中间件堆栈之前的路由器完成。

如果您升级并且没有将此中间件添加到任何组中,您将不会拥有路由模型绑定,因为中间件负责用绑定替换参数。

“路由模型绑定现在使用中间件完成。所有应用程序都应将Illuminate\Routing\Middleware\SubstituteBindings添加到app/Http/Kernel.php文件中的web中间件组:

\Illuminate\Routing\Middleware\SubstituteBindings::class,

您还应该在 HTTP 内核的 $routeMiddleware 属性中注册路由中间件以进行绑定替换:

'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, ……”

Laravel 5.3 Docs - Upgrade - Middleware - Binding Substitution Middleware

【讨论】:

以上是关于Laravel 5.5 路由中的模型绑定不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.5 文件扩展验证不起作用

Laravel 5.5 - 图像验证不起作用

Laravel Admin 路由不起作用,但其他路由不起作用

Laravel - 使用 json 字段自定义路由模型绑定中的键

Laravel 5.5 验证 mimes:apk 不起作用

Laravel - 路由不起作用