S_R*_*S_R 2 php validation request laravel laravel-5
我将无法根据某些情况验证用户的电子邮件地址。
例如
如果正在创建用户,则电子邮件地址必须唯一
如果用户正在更新,但电子邮件地址未更改,请忽略唯一的电子邮件规则
如果要更新用户且其电子邮件地址已更改,则该地址必须唯一
我环顾四周,我知道我可以根据像这样的方法指定不同的规则
public function rules()
{
$user = User::find($this->users);
switch($this->method())
{
case 'POST':
{
return [
'user.email' => 'required|email|unique:users,email',
];
}
case 'PUT':
case 'PATCH':
{
return [
'user.email' => 'required|email,
];
}
default:break;
}
}
Run Code Online (Sandbox Code Playgroud)
是否有任何方法可以使该规则在放置/修补情况下检查电子邮件地址是否已更改,如果必须更改,则该电子邮件地址必须是唯一的?
如果不是,有没有更干净的方法可以实现这一目标?也许没有开关盒?也许我还没有偶然发现更多的深度验证规则?
如果我对您的理解正确,那么您想unique在电子邮件更改的情况下添加验证,如果是这样,那么您只需要在验证中添加一个条件即可。如果检查独特验证它的结构是这样的unique:table,column,except,idColumn,检查文件
因此,验证将如下所示:当您创建新记录时,该记录$userId将为null,但在打补丁时它将具有价值。因此,此验证将同时适用于create和patch。
$userId = isset($user) ? $user->id : null;
$rules = [
'email' => 'required|email|unique:users,email,'. $userId.',id',
];
$this->validate($request, $rules);
Run Code Online (Sandbox Code Playgroud)
我遇到了类似的问题,并在文档中找到了解决该问题的简洁方法。
我的问题是,如果已经创建了用户,则电子邮件地址声称它不是唯一的,即使它已经注册给该用户。
https://laravel.com/docs/8.x/validation#rule-unique
下面的几个标题是这样的:
use Illuminate\Validation\Rule;
$request->validate([
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
Run Code Online (Sandbox Code Playgroud)
这会执行以下操作:
验证电子邮件地址,使其成为必需且唯一,除非该行的用户 ID 与该用户匹配。
| 归档时间: |
|
| 查看次数: |
2919 次 |
| 最近记录: |