【问题标题】:Email Unique Validation电子邮件唯一验证
【发布时间】:2021-08-22 06:36:01
【问题描述】:

我的问题是更新用户资料! 例如,作为 ID 为“1”的用户,向服务器发送更新请求 如果用户向服务器发送一个新的电子邮件地址,更新将完成! ,但是如果用户发送当前的电子邮件地址(在数据库中存在),服务器不应该进行更新!, 另外,考虑 ID 号为 2 的用户,但是这一次,如果 ID 为 2 的用户意外发送了用户 1 的电子邮件地址,服务器不会更新电子邮件地址并向用户返回此验证错误: "此邮件已被其他用户占用"​​p>

我正在努力为 Profile's Table 提供最佳验证角色

个人资料请求:

public function rules()
{
    return[
        "avatar_src"=>"string",
        "address"=>"string",
        'email' => Rule::unique('profiles')->ignore($this->user()->id),
    ];
}

我已经写了这个,但无论如何我都会遇到这个错误!

{
    "message": "The given data was invalid.",
    "errors": {
        "email": [
            "The email has already been taken."
        ]
    }
}

这是我的数据库结构:

【问题讨论】:

标签: php laravel


【解决方案1】:

您可以为此编写自定义验证

public function rules()
{
    return[
        "avatar_src"=>"string",
        "address"=>"string",
        'email' => function ($attribute, $value, $fail) {
        
        if(isset($this->user()->id)&&!empty($this->user()->id)){
            
            $profile=Profile::where('email',$value)->where('user_id','!=',$this->user()->id)->first();
            
            if($profile){
             $fail('The '.$attribute.' is invalid.');
            }
            
        }
           
        },
    ];
}

更新

public function rules()
{
    return[
        "avatar_src"=>"string",
        "address"=>"string",
        'email' =>["email", function ($attribute, $value, $fail) {

            if(isset($this->user()->id)&&!empty($this->user()->id)){

                $profile=Profile::where('email',$value)->where('user_id','!=',$this->user()->id)->first();

                if($profile){
                    $fail('The '.$attribute.' is invalid.');
                }

            }

        }]
        ];
}

【讨论】:

  • 你能试试这个吗 'email' => 'unique:profiles,user_id,'.$this->user()->id, once
  • 如何检查电子邮件格式是否正确?
  • email' =>['email', function ($attribute, $value, $fail) { }]
  • 这行得通吗? 'email' => 'unique:profiles,user_id,'.$this->user()->id,
  • 没有没有工作。只是使用功能
【解决方案2】:

您的验证没问题,如果验证不成功,您必须设置“电子邮件验证过程”并删除电子邮件字段。

【讨论】:

    猜你喜欢
    • 2014-05-23
    • 1970-01-01
    • 2020-03-12
    • 2015-03-24
    • 2014-06-08
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多