img-adonis
#fullstack

Validation

  1. Setup VineJS
node ace add vinejs

Command itu akan menginstall @vinejs/vine dan mendaftarkan service provider VineJS di adonisrc.ts.

  1. Membuat Validator

Gunakan command: node ace make:validator nama = ini akan membuat file validator di folder app/validators. contoh:

import vine from '@vinejs/vine'

export const createPostValidator = vine.compile(
  vine.object({
    title: vine.string().trim().minLength(6),
    slug: vine.string().trim(),
    description: vine.string().trim().escape(),
  }),
)

export const updatePostValidator = vine.compile(
  vine.object({
    title: vine.string().trim().minLength(6),
    description: vine.string().trim().escape(),
  }),
)
  1. Menggunakan Validator di Controller

Di controller, kamu bisa pakai request.all() untuk ambil data request (body + query + params)

import { HttpContext } from '@adonisjs/core/http'
import { createPostValidator, updatePostValidator } from '#validators/post_validator'

export default class PostsController {
  async store({ request }: HttpContext) {
    const data = request.all()
    const payload = await createPostValidator.validate(data)
    return payload
  }

  async update({ request }: HttpContext) {
    const data = request.all()
    const payload = await updatePostValidator.validate(data)
    return payload
  }
}

Atau cara yang lebih direkomendasi: request.validateUsing(…). Ini otomatis menggabungkan data dari body, query, dan file.

import { HttpContext } from '@adonisjs/core/http'
import { createPostValidator, updatePostValidator } from '#validators/post_validator'

export default class PostsController {
  async store({ request }: HttpContext) {
    const payload = await request.validateUsing(createPostValidator)
    return payload
  }

  async update({ request }: HttpContext) {
    const payload = await request.validateUsing(updatePostValidator)
    return payload
  }
}

Jika validasi gagal, Adonis akan otomatis tangani error → lempar exception → di-handle di exception handler. Kamu gak perlu try/catch manual di controller hanya untuk validasi.