我有路线
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,我该怎么做?
答案 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');