Laravel Route模型绑定 - 空用户

LeB*_*eau 1 binding ioc-container laravel-5

我有路

http://192.168.10.15/user/33/edit
Run Code Online (Sandbox Code Playgroud)

我试图根据url id返回用户.

  public function edit($id, \App\User $user)
    {
        dd($user->id);
         return view('user.update');

    }
Run Code Online (Sandbox Code Playgroud)

id返回null,我该怎么做?

小智 12

如果您最近升级到 Laravel 5.3 及更高版本,您可能需要检查您是否已更新laravel/app/Http/Kernel.php以注册路由中间件以进行绑定替换。

路由模型绑定现在使用中间件完成。所有应用程序都应该将 Illuminate\Routing\Middleware\SubstituteBindings 添加到您的 app/Http/Kernel.php 文件中的 Web 中间件组:

\Illuminate\Routing\Middleware\SubstituteBindings::class,
Run Code Online (Sandbox Code Playgroud)

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

'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
Run Code Online (Sandbox Code Playgroud)

注册此路由中间件后,您应该将其添加到 api 中间件组:

'api' => [
    'throttle:60,1',
    'bindings',
],
Run Code Online (Sandbox Code Playgroud)


Mar*_*boc 9

要使路由绑定工作,您应该具有类型提示的变量名称与路径段名称匹配,如所需的文档:

Laravel自动解析路径或控制器操作中定义的Eloquent模型,其类型提示的变量名称与路径段名称匹配.例如:

Route::get('api/users/{user}', function (App\User $user) {
return $user->email; });
Run Code Online (Sandbox Code Playgroud)

由于$ user变量是类型提示为App\User Eloquent模型且变量名称与{user} URI段匹配,因此Laravel将自动注入具有与请求URI中的相应值匹配的ID的模型实例.如果在数据库中找不到匹配的模型实例,则将自动生成404 HTTP响应.

对于你的情况:

Route::get('/users/{user}/edit', 'YourController@edit');
Run Code Online (Sandbox Code Playgroud)

在你的控制器中:

public function edit(\App\User $user)
{
     dd($user->id);
     return view('user.update')->withUser($user);

}
Run Code Online (Sandbox Code Playgroud)