Мой пользовательский валидатор в Adonis Js не работает - PullRequest
0 голосов
/ 11 марта 2020

Я следовал документации 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)

Пользователь. 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

Есть идеи?

1 Ответ

0 голосов
/ 11 марта 2020

Немного сломав голову, я нашел решение.

Прежде всего мне нужно установить проверку поставщика adonis: adonis install @ adonisjs / validator

И поместите его в список провайдеров внутри start / app. js:

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

Затем я создаю нового провайдера: adonis make: provider CustomProvider

Он создаст нового провайдера в папке «Поставщики» в root.

Мой код для этого класса:

'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

Затем я должен добавить этого провайдера в список провайдеров start / app. js:

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

Все это я нашел в do c:

https://adonisjs.com/docs/4.1/service-providers и https://adonisjs.com/docs/4.1/extending-adonisjs

Приветствия.

...