Controller Anda Melakukan Terlalu Banyak Pekerjaan

Buka controller Anda. Lihat method store Anda.

Apakah memiliki 40 baris kode? Apakah dimulai dengan blok validasi yang besar, diikuti oleh beberapa pernyataan if, lalu logika bisnis, dan akhirnya sebuah return?

Controller Anda melakukan pekerjaan yang bukan tugasnya.

Sebuah controller memiliki satu peran sederhana. Ia menerima request, memanggil service untuk menyelesaikan masalah, dan mengembalikan response. Bayangkan ia seperti seorang pelayan. Seorang pelayan membawakan makanan Anda. Mereka tidak memasaknya.

Ketika Anda memasukkan validasi, otorisasi, dan pemrosesan data ke dalam controller, semuanya menjadi berantakan. Anda akhirnya memiliki "monster" 80 baris yang tidak ingin disentuh oleh siapa pun.

Laravel memiliki solusi bawaan: Form Requests.

Berhentilah mengulang logika validasi dan otorisasi di setiap method. Gunakan Single Responsibility Principle. Sebuah class seharusnya hanya memiliki satu alasan untuk berubah. Sebuah controller berubah ketika alur request berubah. Ia tidak seharusnya berubah hanya karena aturan validasi berubah.

Jalankan perintah ini untuk membuat class request khusus: php artisan make:request StorePostRequest

Pindahkan logika Anda ke dalam class baru ini. Sebuah Form Request menangani tiga hal utama:

• Authorization: Gunakan method authorize untuk memutuskan apakah pengguna dapat melakukan suatu tindakan. Jika mengembalikan false, Laravel secara otomatis mengirimkan error 403.

• Validation: Gunakan method rules untuk menentukan persyaratan data Anda.

• Data Preparation: Gunakan prepareForValidation untuk membersihkan atau mengubah data sebelum validasi dijalankan. Ini sangat cocok untuk membuat slug atau menormalisasi nomor telepon.

Setelah Anda memindahkan logika ini, controller Anda akan menyusut. Bentuknya mungkin akan seperti ini:

public function store(StorePostRequest $request)
{
    $post = Post::create($request->validated());
    return redirect()->route('posts.show', $post);
}

Hanya itu. Dua baris.

Controller tetap ramping karena Laravel menjalankan validasi dan otorisasi bahkan sebelum method dimulai. Jika datanya salah, pengguna akan langsung mendapatkan error.

Satu peringatan. Jangan gunakan Form Requests untuk segalanya. Jika Anda memiliki route kecil dengan satu field sederhana, biarkan validasi tetap inline. Gunakan Form Requests saat logika berkembang, berulang, atau melibatkan izin (permissions).

Selain itu, jangan masukkan logika bisnis ke dalam Form Request. Perhitungan dan pembaruan database seharusnya berada di Service layer.

Temukan controller Anda yang paling berantakan hari ini. Ekstrak validasinya ke dalam sebuah Form Request. Lihatlah ia menyusut.

Apa method store terbesar yang pernah Anda lihat? Beritahu saya di kolom komentar.

Source: https://dev.to/denisgusto1/seu-controller-ta-fazendo-o-trabalho-do-form-request-e-ele-nao-devia-512o