我想更新我的用户表中的一列。我已将一个按钮链接到PUT
请求,但没有从请求中获取用户,我在这里错过了什么?
代码
路线:
Route::resource('/admin', 'AdminController')->only(['index','update','destroy'])->middleware('is_admin');
控制器:
public function update(Request $request, User $user)
{
$requestData = $request->all();
dd($requestData, $user, $user->id);
// return redirect('/admin');
}
查看:
{!! Form::open(['action' => ['AdminController@update', $user->id],'method' => 'POST', 'class'=> 'float-right']) !!}
{{Form::hidden('_method','PUT')}}
{{Form::button('Remove points', ['type' =>'submit', 'class' => 'submit-btn'])}}
{!! Form::close() !!}
DD输出:
array:2 [▼
"_token" => "5AOzOmyktXUiuW5OJNQbVOuDuFtEWgkH1h1Zocgo"
"_method" => "PUT"
]
User {#242 ▼
#fillable: array:6 [▶]
#hidden: array:2 [▶]
#connection: null
#table: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: false
+wasRecentlyCreated: false
#attributes: []
#original: []
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#visible: []
#guarded: array:1 [▶]
#rememberTokenName: "remember_token"
}
null
答案 0 :(得分:4)
将您的$user
属性重命名为$admin
。
Laravel仅在定义Route Model Binding模式时才会注入模型:
您的路线必须接受与您要注入的属性名称相同的参数,例如:
PATCH admin\{user}
并且控制器的方法必须具有相同名称的属性:
public function update(User $user) { /** **/ }
由于您是使用Route::resource('admin', ...)
方法定义路线的,因此laravel会自动使用与资源相同的名称来命名该参数,因此您的路线将如下所示;
PATCH admin\{admin}
这就是Laravel无法正确注入模型的原因,因此它只能注入一个空模型(依赖项注入的默认行为是实例化该类并注入它)。
因此,您方法的属性必须命名为$admin
:
public function update(Request $request, User $admin) { /** **/ }
通过这种方式,Laravel可以看到此参数应该填充有加载有URL上给出的ID的模型。