Controller Anda Melakukan Tugas yang Salah
Buka controller anda. Cari kaedah store.
Adakah ia mempunyai 40 baris kod? Adakah anda melihat blok validation yang besar, beberapa pernyataan if, logik perniagaan, dan kemudian pernyataan return?
Controller anda sedang melakukan kerja yang tidak sepatutnya dilakukan.
Satu controller mempunyai satu tugas sahaja. Ia menerima permintaan (request), memanggil servis untuk menyelesaikan masalah, dan mengembalikan respons. Ia adalah pelayan, bukan tukang masak.
Apabila anda meletakkan validation dan authorization di dalam controller, ia akan menjadi kucar-kacir. Anda akhirnya akan mendapat 80 baris kod yang tidak mahu disentuh oleh sesiapa pun.
Laravel mempunyai penyelesaian terbina dalam: Form Requests.
Corak buruk yang biasa dilihat adalah seperti ini:
- Mengesahkan data input
- Menyemak kebenaran (permissions) pengguna
- Mentransformasi data
- Menjalankan logik perniagaan
Ini melanggar Single Responsibility Principle. Sebuah kelas sepatutnya hanya mempunyai satu sebab untuk berubah. Controller berubah apabila aliran permintaan berubah. Ia tidak sepatutnya berubah hanya kerana peraturan validation berubah.
Gunakan arahan ini untuk memperbaikinya:
php artisan make:request StorePostRequest
Ini akan mencipta fail khas untuk logik permintaan anda. Pindahkan tiga perkara ini ke dalam Form Request:
- Authorization: Gunakan kaedah
authorize()untuk menyemak kebenaran. - Validation: Gunakan kaedah
rules()untuk menentukan keperluan data anda. - Penyediaan Data: Gunakan
prepareForValidation()untuk membersihkan atau memformat data sebelum validation.
Sekarang lihat semula controller anda:
public function store(StorePostRequest $request)
{
$post = Post::create($request->validated());
return redirect()->route('posts.show', $post);
}
Controller tersebut kini hanya sepanjang dua baris. Ia bertindak seperti pelayan semula.
Laravel menjalankan authorization dan validation secara automatik sebelum kaedah controller bermula. Jika validation gagal, pengguna akan mendapat ralat dengan serta-merta.
Ikuti garis panduan ini:
- Kekalkan validation secara 'inline' jika ia pendek dan hanya digunakan di satu tempat.
- Gunakan Form Request jika validation menjadi besar, berulang, atau merangkumi authorization.
- Jangan letakkan logik perniagaan dalam Form Request. Gunakan Service layer untuk tujuan itu.
Cari controller anda yang paling kucar-kacir hari ini. Ekstrak validation ke dalam Form Request. Lihat ia mengecil.
Apakah kaedah store terbesar yang pernah anda lihat? Beritahu saya di ruangan komen.
Source: https://dev.to/denisgusto1/seu-controller-ta-fazendo-o-trabalho-do-form-request-e-ele-nao-devia-512o
