在我的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中它不起作用,任何想法为什么?
答案 0 :(得分:10)
听起来你从5.2升级到......某个版本。
Laravel 5.3使用SubstitueBindings
中间件进行隐式和显式绑定,在中间件堆栈之前不再通过路由器完成。
如果您升级并且没有将此中间件添加到任何组,则不会有路由模型绑定,因为中间件负责用绑定替换参数。
“路由模型绑定现在使用中间件完成。所有应用程序都应将
Illuminate\Routing\Middleware\SubstituteBindings
添加到web
文件中的app/Http/Kernel.php
中间件组:
\Illuminate\Routing\Middleware\SubstituteBindings::class,
您还应该在HTTP内核的
$routeMiddleware
属性中注册路由中间件以进行绑定替换:
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
......“Laravel 5.3 Docs - Upgrade - Middleware - Binding Substitution Middleware