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 这对我来说是有效的