如何在表单请求验证中更新具有独特角色的电子邮件
how to update an email with unique role in Form Request Validation
我需要更新在表单请求验证中具有独特角色的电子邮件。创建用户没有问题,但问题是当我尝试更新电子邮件时,它显示电子邮件已被占用。如果输入值中的电子邮件归用户所有,我该怎么做才能被唯一角色跳过。
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
public function rules()
{
return [
'email' => ['sometimes', 'required','email:rfc,dns', 'unique:users,email', 'max:255'],
在控制器中
public function update(UsersRequest $request, $id)
{
$user = User::find($id);
$user->email = $request->input('email');
$user->save();}
blade代码
<input name="email" type="email" class="form-control @error('email') is-invalid @enderror" value="{{ $user->email }}" required>
您正在更新方法中。很明显你有一个要更新的用户 ID 所以先获取用户,
$user = User::findOrFail($id);
现在验证将是,
'email' => ['sometimes', 'required','email:rfc,dns', ($this->email === $this->user->email) ? '' : 'unique:users,email', 'max:255'],
让我知道它是否解决了您的问题。
试试这个
public function rules()
{
switch ($this->method()) {
case 'POST':
{
return [
'email' => 'required|email|max:199|unique:users,email',
];
}
case 'PUT':
case 'PATCH':
{
return [
'email' => 'required|email|unique:users,email,' . $this->user->id,
];
}
default:
break;
}
}
这是我喜欢的
首先,您的更新路线必须有一个 {user}
作为参数
Route::put('/users/{user}', ...);
您也可以在您的请求文件中使用
$unique_email = 'unique:users,email';
if ($user = $this->route('user')) {
$unique_email .= ',' . $user->id;
}
// And then add it to rule
return [
'email' => ['sometimes', 'required', $unique_email],
];
我需要更新在表单请求验证中具有独特角色的电子邮件。创建用户没有问题,但问题是当我尝试更新电子邮件时,它显示电子邮件已被占用。如果输入值中的电子邮件归用户所有,我该怎么做才能被唯一角色跳过。
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
public function rules()
{
return [
'email' => ['sometimes', 'required','email:rfc,dns', 'unique:users,email', 'max:255'],
在控制器中
public function update(UsersRequest $request, $id)
{
$user = User::find($id);
$user->email = $request->input('email');
$user->save();}
blade代码
<input name="email" type="email" class="form-control @error('email') is-invalid @enderror" value="{{ $user->email }}" required>
您正在更新方法中。很明显你有一个要更新的用户 ID 所以先获取用户,
$user = User::findOrFail($id);
现在验证将是,
'email' => ['sometimes', 'required','email:rfc,dns', ($this->email === $this->user->email) ? '' : 'unique:users,email', 'max:255'],
让我知道它是否解决了您的问题。
试试这个
public function rules()
{
switch ($this->method()) {
case 'POST':
{
return [
'email' => 'required|email|max:199|unique:users,email',
];
}
case 'PUT':
case 'PATCH':
{
return [
'email' => 'required|email|unique:users,email,' . $this->user->id,
];
}
default:
break;
}
}
这是我喜欢的
首先,您的更新路线必须有一个 {user}
作为参数
Route::put('/users/{user}', ...);
您也可以在您的请求文件中使用
$unique_email = 'unique:users,email';
if ($user = $this->route('user')) {
$unique_email .= ',' . $user->id;
}
// And then add it to rule
return [
'email' => ['sometimes', 'required', $unique_email],
];