Laravel 用户信息更新期间电子邮件验证问题

问题描述 投票:0回答:1

我对 Laravel 比较陌生,并且遇到了问题。当用户在我的系统中编辑他们的信息时,我想绕过电子邮件验证。具体来说,他们不应收到表明电子邮件已在使用中的错误。我正在使用请求来管理数据更新。

相关代码如下:

public function rules(): array
{
    $userId = $this->input('id');
    $userEmail = $this->input('email');

    return [
        'name' => 'required',
        'surname' => 'required',
        'id' => 'required', 'numeric', 'min_digits:8', 'max_digits:8',
        'tin' => ['required', 'numeric', 'min_digits:11', 'max_digits:11', new ValidateDniTinMatch],
        'date_of_birth' => 'required|date|before_or_equal:' . now()->format('d-m-Y'),
        'email' => [
            'required',
            'unique:owners,email,'.$userEmail,
            Rule::unique('owners')->ignore($userEmail)
        ],
        'mobile_phone' => 'required',
        'alternative_mobile_phone' => 'nullable|different:phone_number',
        'address' => 'required',
        'city' => 'required',
        'province' => 'required',
        'country' => 'required',
        'zip_code' => 'required|numeric',
    ];
}

在我的在线研究和 Laravel 文档中,我发现了这个问题的两个潜在解决方案:

Rule::unique('owners')->ignore($userEmail)

'unique:owners,email,'.$userEmail

正如您在我提供的代码中看到的,我已经尝试了两种方法:

'email' => [
    'required',
    'unique:owners,email,'.$userEmail,
    Rule::unique('owners')->ignore($userEmail)
],

然而,这两种解决方案都不起作用。我不知道还能尝试什么,我感觉有点失落。

php laravel laravel-validation
1个回答
0
投票

这可能是由于错误使用

ignore
方法造成的。
ignore
方法应传递您想要从唯一检查中排除的用户 ID,而不是电子邮件。

public function rules(): array
{
    $userId = $this->input('id');

    return [
        'name' => 'required',
        'surname' => 'required',
        'id' => 'required', 'numeric', 'min_digits:8', 'max_digits:8',
        'tin' => ['required', 'numeric', 'min_digits:11', 'max_digits:11', new ValidateDniTinMatch],
        'date_of_birth' => 'required|date|before_or_equal:' . now()->format('d-m-Y'),
        'email' => [
            'required',
            Rule::unique('owners')->ignore($userId, 'id')
        ],
        'mobile_phone' => 'required',
        'alternative_mobile_phone' => 'nullable|different:phone_number',
        'address' => 'required',
        'city' => 'required',
        'province' => 'required',
        'country' => 'required',
        'zip_code' => 'required|numeric',
    ];
}

在上面的代码中,我在

$userEmail
方法中将
$userId
替换为
ignore
。这告诉 Laravel 在检查唯一电子邮件时忽略具有此 ID 的用户。

© www.soinside.com 2019 - 2024. All rights reserved.