我使用简单的规则进行电子邮件验证:
'email' => 'required|email|unique:users,email',
如何修改选项unique
,使其仅在输入的电子邮件与原始电子邮件不同时才有效?
示例:
字段email
包含表users
中的默认值:example@gmail.com
然后我按下按钮而不对表格进行任何更改,我不应该检查unique:users
。
否则,如果我在example@gmail.com1
中更改了一个符号,则必须使用以下内容验证传入值:unique:users
。
答案 0 :(得分:5)
根据请求方法(更新或创建),您需要有多个规则,并且您可以将第三个参数传递给唯一,以确保在您知道用户/电子邮件时不会失败
'user.email' => 'required|email|unique:users,email,'.$user->id,
切换方法
switch($this->method())
{
...
}
答案 1 :(得分:1)
我使用条件检查做到了这一点:
$validator = Validator::make($request->all(), []);
$validator->sometimes('email', 'unique:users,email', function ($input) {
return $input->email !== Auth::user()->email;
});
答案 2 :(得分:0)
我认为这是Laravel验证中的漏洞。
我更新了用于电子邮件验证的代码。这对我来说很好。
'email' => [
'required', 'email:rfc',
function($attribute, $value, $fail) {
if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
$fail($attribute . ' is invalid.');
}
}],