not_required_when AdonisJs 中的验证器
not_required_when validator in AdonisJs
我知道有一种方法可以扩展 validator
来创建自己的验证规则。但是我不知道如何满足我的要求。
也许我的 objective 可以通过任何现有的验证规则
来实现
我的场景:
我有三个角色;说 role_id=1, role_id=2, role_id=2
我有一个 basic registration
规则适用于所有角色,另一个规则对象适用于他们的特定领域。我需要为所有有条件的人创建一个规则对象,这样我就不会在一个请求中单独验证每个规则(在用于注册所有角色的通用函数中)。
这是我的方法;
basic_registration : {
display_picture: 'required',
first_name: 'required',
last_name: 'required',
role_id: 'required',
phone_number: 'required|max:15',
email: 'required|email|unique:users,email',
address: 'required',
state: 'required',
city: 'required',
zip_code: 'required',
password: 'required',
password_confirmation: 'required_if:password|same:password',
},
role1_specific_registration_rules : {
specific_type_id: 'required',
other_picture: 'required'
},
role2_specific_registration_rules : {
discount_code: 'required',
notification: 'required',
},
role3_specific_registration_rules : {
vehicle_id: 'required',
make: 'required',
},
然后我每次都为每条规则调用验证,有没有办法使用
email: 'not_required_when:role_id,1' // not required when role_id is 1
email: 'not_required_when:role_id,2' // not required when role_id is 2
email: 'not_required_when:role_id,1,3' // not required when role_id is 1 and 3
或任何使用方法(这似乎是正确的)
update
email: 'required_when:role_id,1' // working fine with one value
email: 'required_when:role_id,1,2' // required when role_id is 1 **or** 2--this is only validating first value
或像
这样嵌套的东西
email: 'required_when:role_id:in:1,2' // nested indicative use
或 Laravel required_if
接受数组值作为
email: 'required_if:role_id,1,2' // as in laravel
你可以使用
required_when 如此处 link 所述
indicative required_when
或者您可以简单地在 hooks.js 中添加一个接受参数的自定义方法
只需从您的验证器调用此函数 class
这是条件要求的简单示例
const conditionalNotRequired = async (data, field, message, args, get) => {
if (field == "x" ){
if((data["type"] == "x" && data["y"] != undefined) {
throw message
}
else{
return
}
}
}
你用了两次required_when
像这样
email: 'required_when:role_id,1|required_when:role_id,2',
所需的电子邮件是 role_id =1 或 role_id=2
这对我来说是有效的
我知道有一种方法可以扩展 validator
来创建自己的验证规则。但是我不知道如何满足我的要求。
也许我的 objective 可以通过任何现有的验证规则
我的场景:
我有三个角色;说 role_id=1, role_id=2, role_id=2
我有一个 basic registration
规则适用于所有角色,另一个规则对象适用于他们的特定领域。我需要为所有有条件的人创建一个规则对象,这样我就不会在一个请求中单独验证每个规则(在用于注册所有角色的通用函数中)。
这是我的方法;
basic_registration : {
display_picture: 'required',
first_name: 'required',
last_name: 'required',
role_id: 'required',
phone_number: 'required|max:15',
email: 'required|email|unique:users,email',
address: 'required',
state: 'required',
city: 'required',
zip_code: 'required',
password: 'required',
password_confirmation: 'required_if:password|same:password',
},
role1_specific_registration_rules : {
specific_type_id: 'required',
other_picture: 'required'
},
role2_specific_registration_rules : {
discount_code: 'required',
notification: 'required',
},
role3_specific_registration_rules : {
vehicle_id: 'required',
make: 'required',
},
然后我每次都为每条规则调用验证,有没有办法使用
email: 'not_required_when:role_id,1' // not required when role_id is 1
email: 'not_required_when:role_id,2' // not required when role_id is 2
email: 'not_required_when:role_id,1,3' // not required when role_id is 1 and 3
或任何使用方法(这似乎是正确的)
update
email: 'required_when:role_id,1' // working fine with one value
email: 'required_when:role_id,1,2' // required when role_id is 1 **or** 2--this is only validating first value
或像
这样嵌套的东西email: 'required_when:role_id:in:1,2' // nested indicative use
或 Laravel required_if
接受数组值作为
email: 'required_if:role_id,1,2' // as in laravel
你可以使用 required_when 如此处 link 所述 indicative required_when 或者您可以简单地在 hooks.js 中添加一个接受参数的自定义方法 只需从您的验证器调用此函数 class
这是条件要求的简单示例
const conditionalNotRequired = async (data, field, message, args, get) => {
if (field == "x" ){
if((data["type"] == "x" && data["y"] != undefined) {
throw message
}
else{
return
}
}
}
你用了两次required_when 像这样
email: 'required_when:role_id,1|required_when:role_id,2',
所需的电子邮件是 role_id =1 或 role_id=2 这对我来说是有效的