Laravel中的电子邮件验证规则

时间:2019-01-02 11:25:35

标签: php laravel

我正在以这种方式进行验证。

$rules = [ 
  'email'=> 'required|regex:/^.+@.+$/i|unique:tab_example,email,'.$this>get('example_id').',example_id'
];

return $rules;

但是,我没有获得成功。

该错误表明

  

电子邮件已经存在

我想要的是,如果电子邮件已经存在并且来自同一用户,则不需要通知该电子邮件已经存在。

我不知道我的代码出了什么问题。

5 个答案:

答案 0 :(得分:2)

您可以使用

keydown

应将ID替换为用于唯一检查的表的主键列名称。 {$ id}应该在'email' => "required|email|unique:users,email,{$id},id", 数组之前定义,例如:

$rules

答案 1 :(得分:1)

有时,您可能希望在唯一检查期间忽略给定的ID。

例如,考虑一个包含用户名,电子邮件地址和位置的“更新配置文件” 屏幕。当然,您将需要验证电子邮件地址是否唯一。

但是,如果用户仅更改名称字段而不是电子邮件字段,则您不希望引发验证错误,因为用户已经是电子邮件地址的所有者。

您可以这样使用:

'email' => [
        'required',
         Rule::unique('users')->ignore($user->id),
],

答案 2 :(得分:0)

尝试一下

'email' => Rule::unique('users')->ignore($user->id, 'user_id');

Read Under the Section Forcing A Unique Rule To ignore A given Field

答案 3 :(得分:0)

只需使用

$this->route('example_id') 

代替

$this>get('example_id')

如果您使用资源路由,则使用$ this-> route('user')。

  $rules = [ 
       'email'=> 'required|regex:/^.+@.+$/i|unique:tab_example,email,'.$this->route('example_id').',example_id'
   ];

   return $rules;

答案 4 :(得分:0)

尝试这种方式

$rules = [ 
        'email'=> ['required', 'email', \Illuminate\Validation\Rule::unique('tab_example', 'email')->whereNot('example_id',$this->get('example_id'))]
    ];