我对 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)
],
然而,这两种解决方案都不起作用。我不知道还能尝试什么,我感觉有点失落。
这可能是由于错误使用
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 的用户。