【问题标题】:Can't bind model in Route::model after upgrade laravel 5.2 to 5.3将 laravel 5.2 升级到 5.3 后无法在 Route::model 中绑定模型
【发布时间】:2017-12-28 20:58:41
【问题描述】:

此代码在 laravel 5.2 中有效,但在 laravel 5.3 中无效。 我在RouteServiceProvider:

\Route::model('users', \App\User::class, function ($value) {
    return User::where('name', $value)
              ->first();
});

在我的刀片中,我要求采取行动:

'<a href="{{ action('UserController@show',[Auth::user()->name]) }}">{{Auth::user()name}}</a>'

在我的UserController

public function show($user)
{
    return view('users.user.show', compact('user'));
}

现在$user 只是Auth::user()-&gt;name例如'qwerty'。但不是 User 类的对象如何更早。可能是什么问题?

【问题讨论】:

  • 是的,当然 Auth::user()->name 只会获取名称,如果您想要对象,它将是 Auth::user()
  • 您没有在控制器中键入提示模型,它怎么知道您想要模型而不是“qwerty”这个词?而且,当您进行路由绑定时,请始终尝试使用通常不会与其他事物冲突的关键字......您的“用户”关键字可能是一个糟糕的选择
  • 但它在 laravel 5.2 中工作。升级到 5.3 后出现问题
  • 路线是什么?

标签: laravel laravel-5 laravel-5.2 laravel-5.3 model-binding


【解决方案1】:

你应该确保你添加了:

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

app/Http/Kernel.php 文件中的web 或/和api 中间件。

upgrade guide你可以阅读:

路由模型绑定现在使用中间件完成。全部 应用程序应添加 照亮\路由\中间件\替代绑定到您的网络 app/Http/Kernel.php 文件中的中间件组:

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

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

'绑定' => \Illuminate\Routing\Middleware\SubstituteBindings::class,

一旦这个路由中间件被注册,你应该把它添加到 api中间件组:

'api' => [ '油门:60,1', '绑定', ],

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 2017-06-12
    相关资源
    最近更新 更多