【问题标题】:Laravel 5.5 Model binding in routes doesn't workLaravel 5.5 路由中的模型绑定不起作用
【发布时间】: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 位于错误的命名空间中。

标签: php laravel binding routes


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2018-02-28
    • 2019-12-10
    • 2016-05-11
    • 1970-01-01
    • 2018-03-17
    • 2015-04-24
    相关资源
    最近更新 更多