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 Admin 路由不起作用,但其他路由不起作用