我有一个管理员,他可以在其中创建和更新用户。我创建了一个名为“UserUpdateRequest”的新Form请求。如何传递用户ID以便更新用户详细信息?这是我的规则:
// UserUpdateRequest
public function rules()
{
return [
'firstname' => 'required|min:2|max:255',
'lastname' => 'required|min:2|max:255',
'username' => 'required|max:255',
'password' => 'required|min:6|confirmed',
'email' => 'required|email|max:255|unique:users,email,????',
'contact' => 'required|integer',
'gender' => 'required|in:m,f',
'role_id' => 'required|exists:roles,id',
];
}
// Controller
public function update(UserUpdateRequest $request, User $user)
{
$user->update([
'firstname' => request('firstname'),
'lastname' => request('lastname'),
'username' => request('username'),
'email' => request('email'),
'contact' => request('contact'),
'gender' => request('gender'),
'role_id' => request('role_id'),
]);
session()->flash('message', 'User has been successfully added.');
return redirect('/users/' . $user->id);
}
'required|email|max:255|unique:users,email,????',
是我感到困惑的地方。
答案 0 :(得分:4)
这就是我所做的:
查看:
<input type="hidden" value="{{ $user->id }}" name="user_id">
控制器:
public function rules()
{
$id = $this->request->get('user_id');
return [
'firstname' => 'required|min:2|max:255',
'lastname' => 'required|min:2|max:255',
'username' => 'required|max:255',
'email' => 'required|email|max:255|unique:users,email,'.$id,
'contact' => 'required|integer',
'gender' => 'required|in:m,f',
'role_id' => 'required|exists:roles,id',
];
}
答案 1 :(得分:3)
由于管理员正在更改用户,我假设您已在视图文件中拥有用户数据。
您可以在表单上传递隐藏的输入。
<input type="hidden" value="{{$user->id}}" name="user_id" />
然后在您的控制器上接收它。
$user_id = $request->input('user_id');
$user = \App\User::find($user_id);
//validation comes here
根据新信息进行修改
public function update(UserUpdateRequest $request, User $user)
应该是
public function update(Request $request, User $user)
你必须在你的控制器上调用Request;
use Illuminate\Http\Request;
之后,您可以
获取您的请求dd($request->all());
但如果您使用特殊请求发布 UserUpdateRequest 类。
答案 2 :(得分:1)
将userId传递给隐藏的输入字段,并使用唯一的验证,如
unique:users,email,userId
答案 3 :(得分:0)
routes / web.php
Route::get('/user/edit/{id}', 'UserController@edit')->name('user.edit');
Route::post('/user/update/{id}', 'UserController@update')->name('user.update');
FormRequest
'email' => ['required',Rule::unique('users')->ignore($this->route('id'))],