Laravel中的电子邮件验证规则

3
我这样进行验证。
$rules = [ 
  'email'=> 'required|regex:/^.+@.+$/i|unique:tab_example,email,'.$this>get('example_id').',example_id'
];

return $rules;

然而,我没有获得成功。

错误信息显示:

该电子邮件已存在

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

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


怎样从同一个用户中返回? - spartyboy
你要在哪里实现这段代码?在控制器中吗? - veelasky
有一个用户注册,当您打开他或她的注册并发送相同的注册表格时,如果电子邮件没有更改,该电子邮件仍然与此用户相关联,即您不需要显示该电子邮件已被使用,因为它是同一用户。 - Mateus Gonçalves
我创建了一个请求。 - Mateus Gonçalves
5个回答

3

您可以使用

'email' => "required|email|unique:users,email,{$id},id",

id应该替换为您用于唯一性检查的表的主键列名称。{$id}应该在$rules数组之前定义,例如:

$id = $request->route('user')

请纠正我,但我认为最后一个值(即id)是不必要的。https://laravel.com/docs/4.2/validation#rule-unique - Sven Hakvoort
最后两个将用于“除$id列之外的唯一性”(在更新时) - Hilmi Erdem KEREN
是的,但倒数第二个($id)是ID规范,Laravel默认会查找id列,因此最后一个在这里不是必需的。 - Sven Hakvoort
1
当然可以!我包含它是因为问题所有者包含了 $this>get('example_id').',example_id' - Hilmi Erdem KEREN
啊,是的,我错过了那个:) 那就算了。 - Sven Hakvoort
"email" => "required|unique:tab_example,email,".$this->route('id_example').",id_example" 是正确的吗? - Mateus Gonçalves

2
有时候,在唯一性检查期间,您可能希望忽略给定的ID。
例如,考虑一个包含用户名、电子邮件地址和位置的“更新个人资料”屏幕。当然,您希望验证电子邮件地址是唯一的。
但是,如果用户只更改了名称字段而没有更改电子邮件字段,则不希望因为该用户已经拥有电子邮件地址而抛出验证错误。
您可以像这样使用:
'email' => [
        'required',
         Rule::unique('users')->ignore($user->id),
],

1

1
尝试这种方式。
$rules = [ 
        'email'=> ['required', 'email', \Illuminate\Validation\Rule::unique('tab_example', 'email')->whereNot('example_id',$this->get('example_id'))]
    ];

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;

我已经尝试过了,但仍然返回相同的问题,它说该电子邮件已存在... - Mateus Gonçalves
你的参数名称是什么?你使用了资源路由吗? - Md.Sukel Ali
我不是在谈论你的规则函数,我在谈论你的路由。你能给出相关的路由吗? - Md.Sukel Ali
你的验证看起来很不错。如果你按照我的建议更新代码,我正在使用它在我的项目中,并且它运行良好。谢谢。 - Md.Sukel Ali
我解决了这个问题。我只是像这样获取ID:'med_email' => Rule :: unique ('tab_medicos') -> ignore (request() -> route ('id'), 'med_id'),谢谢朋友,感谢帮助。 - Mateus Gonçalves
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接