Controller Anda Melakukan Pekerjaan yang Salah

Buka controller Anda. Cari method store.

Apakah isinya memiliki 40 baris kode? Apakah Anda melihat blok validasi yang besar, beberapa pernyataan if, logika bisnis, dan kemudian sebuah pernyataan return?

Controller Anda melakukan pekerjaan yang tidak seharusnya ia lakukan.

Sebuah controller memiliki satu tugas. Ia menerima request, memanggil service untuk menyelesaikan masalah, dan mengembalikan response. Ia adalah pelayan, bukan koki.

Ketika Anda menempatkan validasi dan otorisasi di dalam controller, semuanya menjadi berantakan. Anda akan berakhir dengan 80 baris kode yang tidak ingin disentuh oleh siapa pun.

Laravel memiliki solusi bawaan: Form Requests.

Pola buruk yang umum terlihat seperti ini:

  • Memvalidasi data input
  • Memeriksa izin pengguna
  • Mentransformasi data
  • Menjalankan logika bisnis

Ini melanggar 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.

Gunakan perintah ini untuk memperbaikinya: php artisan make:request StorePostRequest

Ini membuat file khusus untuk logika request Anda. Pindahkan tiga hal ini ke dalam Form Request:

  • Authorization: Gunakan method authorize() untuk memeriksa izin.
  • Validation: Gunakan method rules() untuk menentukan persyaratan data Anda.
  • Data Preparation: Gunakan prepareForValidation() untuk membersihkan atau memformat data sebelum validasi.

Sekarang lihat kembali controller Anda:

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

Controller tersebut sekarang hanya sepanjang dua baris. Ia kembali bertindak seperti seorang pelayan.

Laravel menjalankan otorisasi dan validasi secara otomatis bahkan sebelum method controller dimulai. Jika validasi gagal, pengguna akan langsung mendapatkan error.

Ikuti panduan berikut:

  • Tetap gunakan validasi inline jika pendek dan hanya digunakan di satu tempat.
  • Gunakan Form Request jika validasi bertambah banyak, berulang, atau mencakup otorisasi.
  • Jangan menempatkan logika bisnis di dalam Form Request. Gunakan Service layer untuk hal tersebut.

Temukan controller Anda yang paling berantakan hari ini. Ekstrak validasinya ke dalam Form Request. Lihatlah bagaimana 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