Validasi Form di Symfony
Penjelasan
Symfony Validator component memvalidasi data lewat objek Constraints (aturan validasi) yang dicek satu per satu memakai service validator. Kalau ada pelanggaran, hasilnya berupa ConstraintViolationList yang bisa dicek jumlahnya dan ditampilkan pesan errornya.
Contoh Konsep
<?php
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class ProdukController extends AbstractController
{
#[Route('/produk', name: 'produk_store', methods: ['POST'])]
public function store(Request $request, ValidatorInterface $validator): Response
{
$nama = $request->request->get('nama');
$violations = $validator->validate($nama, [
new Assert\NotBlank(),
new Assert\Length(min: 3),
]);
if (count($violations) > 0) {
return new Response((string) $violations[0]->getMessage(), 422);
}
return new Response("Data valid: {$nama}");
}
}
Praktikum
Buat method store(Request $request, ValidatorInterface $validator) yang memvalidasi input judul memakai Assert\NotBlank() dan Assert\Length(min: 5). Kembalikan Response 422 dengan pesan error kalau tidak valid, atau "Tersimpan: {$judul}" kalau valid.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Untuk form yang kompleks dengan banyak field sekaligus, biasanya Constraints TIDAK divalidasi satu-satu manual seperti contoh di atas, tapi digabung ke dalam class DTO dengan attribute #[Assert\NotBlank] di tiap propertinya, lalu divalidasi sekaligus lewat $validator->validate($dto) — dibahas lebih dalam di materi Form Component.