当用户进入设置视图时,该视图会在输入字段中显示其当前信息,可以对其进行编辑然后保存。但是,我面临着一个小障碍,我不知道如何避免。例如:
例如,用户可能只想编辑 1 个字段,例如用户名,但是,要做到这一点,他必须更改他的电子邮件,否则他会收到一条消息,指出电子邮件已被接收,这是真的,电子邮件已经被同一个用户接收。此外,即使密码字段不是必需的,他也会收到一条消息,指出密码必须至少为 5 个字符,如果我删除该验证,用户将能够添加空密码。
我只想这样做,这样我就可以只编辑 1 个字段,而不必更改其余字段。
以下是我的观点,它允许人们更改其当前帐户信息:
<form method="post" action="{{ route('updateProfile', $user) }}" enctype="multipart/form-data">
<input type="text" name="first_name" value="{{ $user->first_name }}" />
<input type="text" name="last_name" value="{{ $user->last_name }}" />
<input type="text" name="username" value="{{ $user->username }}" />
<input type="email" name="email" value="{{ $user->email }}" />
<input type="password" name="password" />
<input type="password" name="password_confirmation" />
<input type="file" name="file" />
{{ csrf_field() }}
{{ method_field('patch') }}
<button class='Submit' type="submit" name="submit">Save Changes</button>
</form>
这是我的个人资料更新功能:
public function updateProfile(Request $request, User $user){
$this->validate($request, [
'first_name' => 'max:120',
'last_name' => 'max:120',
'username' => 'max:120',
'email' => 'email|unique:users',
'password' => 'min:5|max:12|confirmed',
'file' => 'max:1999'
]);
$file = $request->file('file')->getClientOriginalName();
$fileName = pathinfo($file, PATHINFO_FILENAME);
$extension = $request->file('file')->getClientOriginalExtension();
$fileNameToStore = $fileName.'_'.time().'.'.$extension;
$fileNameToStore = str_replace(' ', '', $fileNameToStore);
$path = $request->file('file')->storeAs('public/uploads/profile_pictures/', $fileNameToStore);
$user->first_name = request('first_name');
$user->last_name = request('last_name');
$user->username = request('username');
$user->email = request('email');
$user->password = bcrypt(request('password'));
$user->profile_picture = $fileNameToStore;
$user->save();
return back();
}
如果您查看有关unique
规则的验证规则文档,您会发现您可以指定其他参数:
unique:table,column,except,idColumn
使用第三个参数,您可以告诉验证器忽略表中的某个记录。
将验证规则更改为以下内容:
$this->validate($request, [
'first_name' => 'max:120',
'last_name' => 'max:120',
'username' => 'max:120',
'email' => 'email|unique:users,email,'.$user->id,
'password' => 'min:5|max:12|confirmed',
'file' => 'max:1999'
]);
这应该可以解决您的问题。
如果出于某种原因您没有id
列作为主键,请将其添加为最后一个参数。