Laravel 5.5 Model binding in routes doesn't work

青春壹個敷衍的年華 提交于 2019-12-22 04:55:21

问题


In my routes.php I have this:

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

In my controller I have:

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

$user is empty object (like new user; without attributes)

if I use:

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

Works perfectly!!

I have previously Laravel 5.2 and this code works fine but in Laravel 5.5 it doesn't work, any ideas why?


回答1:


Sounds like you upgraded from 5.2 up to ... some version.

Laravel 5.3 uses the SubstitueBindings middleware to do the implicit and explicit bindings, it is no longer done via the router before the middleware stack.

If you upgraded and did not add this middleware to any of the groups, you will not have your route model bindings as the middleware is responsible for substituting the parameter with the binding.

"Route model binding is now accomplished using middleware. All applications should add the Illuminate\Routing\Middleware\SubstituteBindings to your web middleware group in your app/Http/Kernel.php file:

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

You should also register a route middleware for binding substitution in the $routeMiddleware property of your HTTP kernel:

'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, ..."

Laravel 5.3 Docs - Upgrade - Middleware - Binding Substitution Middleware



来源:https://stackoverflow.com/questions/47783870/laravel-5-5-model-binding-in-routes-doesnt-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!