img-adonis
#fullstack

Controller

Controller adalah tempat ngelola logika HTTP request.

untuk membuat controller bisa dengan menggunakan command

node ace make:controller users

Controller bertugas untuk apa aja ?

  1. Menerima Request

Dapet data dari:

contoh:

request.input('email')
params.id

  1. Validasi Request (panggil validator) Controller biasanya akan:
const payload = await request.validateUsing(CreateUserValidator)

  1. Panggil Service / Model

Controller tidak nyimpen bisnis logic berat. Dia cuma manggil service/model untuk ngelakuin pekerjaan.

const user = await UserService.create(input)

  1. Mengembalikan Response
return response.ok({ message: 'success' })

Jadi Controller itu seperti ‘jembatan’.
Controller cuma “perantara”, bukan tempat logic berat.

Frontend/client  Controller  Service  Model  Database  Controller  Client

Supaya kode bersih:

Contoh controller: Controller menerima input → panggil service → kirim response.

import UserService from '#services/user_service'

export default class UsersController {
  constructor(protected userService: UserService) {}

  async store({ request, response }) {
    const payload = request.only(['email', 'password'])
    const user = await this.userService.create(payload)

    return response.status(201).json(user)
  }
}

Single Action Controller

Single Action Controller adalah controller yang CUMA punya 1 method, biasanya namanya handle().

Tujuan Single-Action Controller

Dipakai kalau satu route cuma butuh satu logika, biar filenya simpel dan clean.

Biasanya untuk hal-hal seperti:

Contoh Single-Action Controller


  1. Buat controller
node ace make:controller Login --single

hasilnya seperti ini:

export default class SingleActionsController {
  async handle({ request, auth, response }: HttpContext) {
    const { email, password } = request.only(['email', 'password'])
    console.log(email, password)
    return response.ok({ message: 'Hello World' })
    // return auth.use('web').attempt(email, password)
  }
}

2. Routingnya seperti ini
import router from '@adonisjs/core/services/router'
import LoginController from '#controllers/login_controller'

router.post('/login', LoginController)

Tanpa specify method karena otomatis memanggil handle().

Kapan dipakai ?

Gunakan single-action kalau: Aksi kecil & spesifik

Contoh: