Laravel "unique" 表单请求验证中的自定义消息验证
Laravel "unique" Custom Message Validation in Form Request Validation
我创建了表单请求验证,但在为多个 "unique" 验证器
自定义自定义验证消息时遇到问题
我创建了文档中所说的函数,但是它没有显示我的消息而是默认消息(电子邮件:["The email has already been taken."])
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => "required|string|email|unique:table1,email|unique:table2,email"
];
}
/**
* Get the error messages for the defined validation rules.
*
* @return array
*/
public function messages()
{
return [
"email.unique:table1,email" => "Error message for table 1",
"email.unique:table2,email" => "Completely different error message for table 2"
];
}
我可以输出自定义结果,如果我使用:
public function messages()
{
return [
"email.unique" => "Same message for table 1 and table 2 error messages"
];
}
但这不是我想要的,我想单独自定义消息,我应该怎么做?
你不能使用这个:
public function messages()
{
return [
"email.unique:table1,email" => "Error message for table 1",
"email.unique:table2,email" => "Completely different error message for table 2"
];
}
您不能通过 table 名称来区分这两个独特的规则。
我的建议:
您可以创建自己的自定义验证规则 (check the docs) 以应用 unique:table1
和 unique:table2
,命名方式不同(例如:unique_first_table 和 unique_second_table)。那么你可以这样做:
$messages = [
'email.unique_table_1' => 'Error message for table 1',
'email.unique_table_2' => 'Completely different error message for table 2',
];
自定义验证规则:
在您的 AppServiceProvider
文件中,输入以下代码:
use Validator;
//In the boot method:
Validator::extend('unique_table_1', function ($attribute, $value, $parameters, $validator) {
if(ModelFirstTable::where('email', $value)->count() > 0)
return false;
return true;
});
Validator::extend('unique_table_2', function ($attribute, $value, $parameters, $validator) {
if(ModelSecondTable::where('email', $value)->count() > 0)
return false;
return true;
});
ModelFirstTable and ModelSecondTable must be replaced with the model name of your first and second table, respectively.
然后,在您的表单请求中使用它:
public function rules()
{
return [
'email' => "required|string|email|unique_table_1|unique_table_2"
];
}
public function messages()
{
return [
"email.unique_table_1" => "Error message for table 1",
"email.unique_table_2" => "Completely different error message for table 2"
];
}
希望对您有所帮助。
我创建了表单请求验证,但在为多个 "unique" 验证器
自定义自定义验证消息时遇到问题我创建了文档中所说的函数,但是它没有显示我的消息而是默认消息(电子邮件:["The email has already been taken."])
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => "required|string|email|unique:table1,email|unique:table2,email"
];
}
/**
* Get the error messages for the defined validation rules.
*
* @return array
*/
public function messages()
{
return [
"email.unique:table1,email" => "Error message for table 1",
"email.unique:table2,email" => "Completely different error message for table 2"
];
}
我可以输出自定义结果,如果我使用:
public function messages()
{
return [
"email.unique" => "Same message for table 1 and table 2 error messages"
];
}
但这不是我想要的,我想单独自定义消息,我应该怎么做?
你不能使用这个:
public function messages()
{
return [
"email.unique:table1,email" => "Error message for table 1",
"email.unique:table2,email" => "Completely different error message for table 2"
];
}
您不能通过 table 名称来区分这两个独特的规则。
我的建议:
您可以创建自己的自定义验证规则 (check the docs) 以应用 unique:table1
和 unique:table2
,命名方式不同(例如:unique_first_table 和 unique_second_table)。那么你可以这样做:
$messages = [
'email.unique_table_1' => 'Error message for table 1',
'email.unique_table_2' => 'Completely different error message for table 2',
];
自定义验证规则:
在您的 AppServiceProvider
文件中,输入以下代码:
use Validator;
//In the boot method:
Validator::extend('unique_table_1', function ($attribute, $value, $parameters, $validator) {
if(ModelFirstTable::where('email', $value)->count() > 0)
return false;
return true;
});
Validator::extend('unique_table_2', function ($attribute, $value, $parameters, $validator) {
if(ModelSecondTable::where('email', $value)->count() > 0)
return false;
return true;
});
ModelFirstTable and ModelSecondTable must be replaced with the model name of your first and second table, respectively.
然后,在您的表单请求中使用它:
public function rules()
{
return [
'email' => "required|string|email|unique_table_1|unique_table_2"
];
}
public function messages()
{
return [
"email.unique_table_1" => "Error message for table 1",
"email.unique_table_2" => "Completely different error message for table 2"
];
}
希望对您有所帮助。