Lui*_*uiz 21 authentication validation laravel
我正在使用Laravel 5.2并希望使用验证器更新用户的帐户.
我想保持电子邮件字段的唯一性,但是,如果用户键入他当前的电子邮件,它将会中断.如果电子邮件是唯一的,除了用户自己当前的电子邮件之外,我该如何更新?
Ant*_*iro 56
你可以告诉验证者:
'email' => 'unique:users,email_address,'.$user->id
Run Code Online (Sandbox Code Playgroud)
检查文档,在"强制使用唯一规则忽略给定ID"部分中.
Afr*_*mad 20
在Request Class中,您可能需要在PUT或PATCH方法中进行此验证,如果您没有用户,则可以使用此规则
You have 2 options to do this
Run Code Online (Sandbox Code Playgroud)
1:
'email' => "unique:users,email,$this->id,id"
Run Code Online (Sandbox Code Playgroud)
要么
2:
use Illuminate\Validation\Rule; //import Rule class
'email' => Rule::unique('users')->ignore($this->id); //use it in PUT or PATCH method
Run Code Online (Sandbox Code Playgroud)
$ this-> id 提供用户的id,因为$ this是Request Class的对象,Request也包含user对象.
public function rules()
{
switch ($this->method()) {
case 'POST':
{
return [
'name' => 'required',
'email' => 'required|email|unique:users',
'password' => 'required'
];
}
case 'PUT':
case 'PATCH':
{
return [
'name' => 'required',
'email' => "unique:users,email,$this->id,id",
OR
//below way will only work in Laravel ^5.5
'email' => Rule::unique('users')->ignore($this->id),
//Sometimes you dont have id in $this object
//then you can use route method to get object of model
//and then get the id or slug whatever you want like below:
'email' => Rule::unique('users')->ignore($this->route()->user->id),
];
}
default: break;
}
}
Run Code Online (Sandbox Code Playgroud)
希望它能在使用请求类时解决问题.
对于使用FormRequest& Laravel 5.7 并面临此问题的编码人员,您可以执行以下操作
public function rules() {
return [
'email' => ['required', 'string', 'email', 'max:255',
Rule::unique('users')->ignore($this->user),
],
];
}
Run Code Online (Sandbox Code Playgroud)
该$this->user会返回从请求传来的用户ID。
小智 7
'email' => "required|email|unique:users,email,$id",
Run Code Online (Sandbox Code Playgroud)
在laravel 8 . 我也找了好久。这会起作用
小智 7
有很多方法:
1- 在控制器中
public function update(Request $request, User $user)
{
$request->validate([
'email' => 'required|email|unique:users,email,'.$user->id,
]);
}
Run Code Online (Sandbox Code Playgroud)
2-表格请求
表单请求是包含验证逻辑的自定义请求类。在这里阅读更多内容。
public function rules()
{
return [
'email' => 'required|email|unique:users,email,'.$this->user->id,
];
}
Run Code Online (Sandbox Code Playgroud)
在 Laravel 5.7+ 上,为了指示验证器忽略用户 ID,我们将使用 Rule 类来流畅地定义规则。在这个例子中,我们还将验证规则指定为一个数组,而不是使用 | 分隔规则的字符:
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => ['required',Rule::unique('users')->ignore($user->id)],
]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38781 次 |
| 最近记录: |