我正在尝试提交表单并验证内容。 在其中一个请求中,我需要制定一个特殊规则。 我按照文档说它使用unique并声明规则。
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
我正在尝试使用文档中的示例,但是我得到了这个错误:
Class 'Illuminate\Validation\Rule' not found
我宣布了行
use Illuminate\Validation\Rule;
在我的控制器中,但错误仍然存在。
答案 0 :(得分:3)
您不必为此使用Rule类。
简单地遵循以下规则:
'email' => 'required|unique:users,email,' . $user->id
答案 1 :(得分:0)
Illuminate\Validation\Rule
类已在Laravel 5.3+上添加。
我提醒您,您已经使用旧的laravel版本进行了测试。
请参阅问题(PR)15809:[5.3] Object based unique and exists rules for validation.
答案 2 :(得分:0)
我在版本v5.3
上遇到了问题。我刚刚更新到最新的补丁程序版本(在我的情况下为v5.3.31
),并且一切正常!
答案 3 :(得分:0)
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
到目前为止,您所做的一切还可以,直到您添加行
“ Rule::unique('users')->ignore($user->id)
”
不起作用的唯一原因是因为您没有指定要唯一的列名。假设在数据库中,您要唯一的表用户的列名是“ email”。然后,您的代码应如下所示:
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users', 'email')->ignore($user->id),
],
]);
因此
//Right Way
"Rule::unique('users', 'email')->ignore($user->id)"
//Wrong Way
"Rule::unique('users')->ignore($user->id)"
答案 4 :(得分:-1)
您发布的示例中的Rule类用于验证唯一字段。例如,如果您有一封电子邮件,您将希望在表格中是唯一的,当您要编辑记录时,在保存时,将收到验证器错误,因为您正在保存已在数据库中的相同电子邮件。
您发布的示例:
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
与此案例相关,编辑记录并验证电子邮件(表用户中唯一)。此示例避免针对同一用户验证电子邮件 -
要使用它,您必须添加该类(不包括在laravel安装程序中)。 Here你拥有它。
在您的问题中,您说的是使用唯一规则。唯一规则适用于表格,电子邮件,个人身份识别(法律)等必须具有唯一性的字段。验证您是否需要唯一规则。
答案 5 :(得分:-2)
为什么不尝试这样的方法:
$validator = Validator::make($request->all(), [
'email' => 'required|unique:<table_name>',
]);
if ($validator->fails()) {
...
}
如果你的列也被命名为电子邮件laravel将自动知道,否则执行
required|unique:<table_name>,<column_name>
以下是文档验证部分的链接:https://laravel.com/docs/5.3/validation