【问题标题】:My custom validator in AdonisJs is not working我在 AdonisJs 中的自定义验证器不工作
【发布时间】:2020-03-11 05:40:47
【问题描述】:

我遵循了有关如何制作自定义验证器的 Adonis 文档。我只是为了测试而将其变得如此简单。

当我发布“帖子”时,我收到消息“cpf 未定义为验证规则”

代码:

Cpf.js

const Validator = use('Validator')

const cpfValidation = async (data, field, message, args, get) => {
  const value = get(data, field)

  console.log('This line is on console!')

  if (!row) {
    throw message
  }
}

Validator.extend('cpf', cpfValidation)

User.js

'use strict'

class User {

  get validateAll() {
    return true
  }

  get rules() {
    return {
      name: 'required',
      lastname: 'required',
      email: 'required|email|unique:users',
      cpf: 'cpf',
      birthday: 'required',
      password: 'required|min:6|max:20'
    }
  }
}

module.exports = User

结果: https://i.imgur.com/J5L8Y0O.png

有什么想法吗?

【问题讨论】:

    标签: customvalidator adonis.js


    【解决方案1】:

    我有点头疼后,找到了解决办法。

    首先,我必须安装 adonis 提供程序验证: adonis install @adonisjs/validator

    并将其放入 start/app.js 内的提供者列表中:

    const providers = [
      '@adonisjs/validator/providers/ValidatorProvider'
    ]
    

    然后我通过以下方式创建一个新的提供者: adonis make:provider CustomProvider

    它将在根目录下的 "providers" 文件夹上创建一个新的提供程序。

    我这个类的代码是:

    'use strict'
    
    const { ServiceProvider } = require('@adonisjs/fold')
    
    class CustomValidator extends ServiceProvider {
    
      async isCpfCorrect(data, field, message, args, get) {
        const cpf = get(data, field);
    
        //It will be validated by "unique" validation, if value is null
        if(!cpf){
           return
        }
    
        /*
          ALL MY LOGIC SHOULD BE HERE...
        */
    
      }
    
      register() { }
    
      boot() {
        const Validator = use('Validator');
        Validator.extend('cpf', this.isCpfCorrect);
      }
    }
    
    module.exports = CustomValidator
    

    那我得把这个provider加入到start/app.js的provider列表中:

    const path = require('path')
    
    const providers = [
      '@adonisjs/framework/providers/AppProvider',
      '@adonisjs/auth/providers/AuthProvider',
      '@adonisjs/bodyparser/providers/BodyParserProvider',
      '@adonisjs/cors/providers/CorsProvider',
      '@adonisjs/lucid/providers/LucidProvider',
      '@adonisjs/mail/providers/MailProvider',
      '@adonisjs/framework/providers/ViewProvider',
      '@adonisjs/validator/providers/ValidatorProvider',
      path.join(__dirname, '..', 'providers', 'CustomValidator')
    ]
    

    然后我将能够在验证中使用我的提供程序:

    'use strict'
    
    class User {
    
      get validateAll() {
        return true
      }
    
      get rules() {
        return {
          name: 'required',
          lastname: 'required',
          email: 'required|email|unique:users',
          cpf: 'required|cpf' <--------------- here is my custom provider for cpf,
          birthday: 'required',
          password: 'required|min:6|max:20'
        }
      }
    }
    
    module.exports = User
    

    所有这些都是我在文档中找到的:

    https://adonisjs.com/docs/4.1/service-providershttps://adonisjs.com/docs/4.1/extending-adonisjs

    干杯。

    【讨论】:

      猜你喜欢
      • 2011-09-04
      • 2012-04-20
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      相关资源
      最近更新 更多