Controller adalah tempat ngelola logika HTTP request.
untuk membuat controller bisa dengan menggunakan command
node ace make:controller users
Dapet data dari:
contoh:
request.input('email')
params.id
const payload = await request.validateUsing(CreateUserValidator)
Controller tidak nyimpen bisnis logic berat. Dia cuma manggil service/model untuk ngelakuin pekerjaan.
const user = await UserService.create(input)
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 adalah controller yang CUMA punya 1 method, biasanya namanya handle().
Dipakai kalau satu route cuma butuh satu logika, biar filenya simpel dan clean.
Biasanya untuk hal-hal seperti:
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)
}
}
import router from '@adonisjs/core/services/router'
import LoginController from '#controllers/login_controller'
router.post('/login', LoginController)
Tanpa specify method karena otomatis memanggil handle().
Gunakan single-action kalau: Aksi kecil & spesifik
Contoh: