Laravel Route模型绑定 - 空用户

时间:2017-08-03 10:38:47

标签: laravel-5 binding ioc-container

我有路线

http://192.168.10.15/user/33/edit

我正在尝试根据网址ID返回用户。

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

    }

id返回null,我该怎么做?

3 个答案:

答案 0 :(得分:7)

对于路由绑定工作,您应该将类​​型提示的变量名称与路径段名称匹配,如需要的文档:

  

Laravel会自动解析路线或路线中定义的雄辩模型   类型提示的变量名称与路径匹配的控制器操作   段名称。例如:

Route::get('/users/{user}/edit', 'YourController@edit');
     

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

对于你的情况:

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

}

在你的控制器中:

> s1="Aug-02-2017 07:54:31 AM UTC"
> library(lubridate)

Attaching package: ‘lubridate’

The following object is masked from ‘package:base’:

    date


> d1=mdy_hms(s1)
> d1
[1] "2017-08-02 07:54:31 UTC" 
> date(d1)
[1] "2017-08-02"

答案 1 :(得分:1)

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

  

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

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

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

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

一旦此路由中间件已注册,则应将其添加到   api中间件组:

'api' => [
    'throttle:60,1',
    'bindings',
],

答案 2 :(得分:0)

我通过添加命名路由来修复它。如果没有为路由指定名称,则无法进行模型绑定。

Route::get('product/{product}', "ProductController@read")->name('product.read');