当用户进入设置视图时,视图会在输入字段中显示其当前信息,这些信息可以编辑然后保存。但是,我面临一个小障碍,我不确定如何避免。例如:
用户可能只想编辑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>
这是我的profileUpdate功能:
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();
}
答案 0 :(得分:2)
如果您查看有关unique
规则的验证rule documentation,您会看到可以指定其他参数:
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
列作为主键,请将其添加为最后一个参数。