Memahami Validasi Bersarang
Validasi bersarang di Laravel memungkinkan kita untuk memvalidasi data yang berada di dalam struktur data yang lebih kompleks, seperti array atau objek. Hal ini sangat berguna ketika kita berhadapan dengan formulir yang berisi data nested atau ketika kita ingin memastikan bahwa data yang kita terima dari API atau sumber data lainnya memiliki struktur yang benar.
Contoh Kasus
Misalkan kita memiliki sebuah formulir untuk membuat postingan blog yang memiliki banyak tag. Data yang dikirimkan oleh formulir akan berbentuk seperti ini:
JSON
{
"title": "Judul Posting",
"content": "Isi Posting",
"tags": [
"laravel",
"php",
"web development"
]
}
Di sini, kita perlu memvalidasi tidak hanya title
dan content
, tetapi juga memastikan bahwa tags
adalah sebuah array dan setiap elemen di dalamnya adalah sebuah string.
Cara Melakukan Validasi Bersarang di Laravel
Laravel menyediakan beberapa cara untuk melakukan validasi bersarang:
1. Menggunakan $request->validate()
Cara yang paling sederhana adalah menggunakan metode validate()
pada objek request. Untuk memvalidasi array, kita bisa menggunakan notasi titik (dot) untuk menunjuk ke elemen array yang ingin kita validasi.
PHP
public function store(Request $request)
{
$validatedData = $request->validate([
'title' => 'required|string',
'content' => 'required|string',
'tags.*' => 'required|string',
]);
// Simpan data ke database
}
tags.*
: Menunjukkan bahwa setiap elemen dalam arraytags
harus berupa string yang wajib diisi.
2. Menggunakan Form Request
Untuk validasi yang lebih kompleks, kita bisa menggunakan Form Request. Form Request memungkinkan kita untuk memisahkan logika validasi dari controller.
PHP
// PostRequest.php
public function rules()
{
return [
'title' => 'required|string',
'content' => 'required|string',
'tags.*' => 'required|string',
];
}
PHP
// Controller
public function store(PostRequest $request)
{
// Validasi otomatis dilakukan oleh Form Request
}
3. Menggunakan Rules Custom
Jika kita membutuhkan validasi yang sangat spesifik, kita bisa membuat custom rule.
PHP
// CustomRule.php
use Illuminate\Contracts\Validation\Rule;
class CustomRule implements Rule
{
public function passes($attribute, $value)
{
// Logika validasi custom
return is_array($value) && count($value) > 2; // Misal, minimal 3 tag
}
public function message()
{
return 'Minimal 3 tag harus diisi.';
}
}
PHP
// Controller
public function store(Request $request)
{
$request->validate([
'tags' => ['required', new CustomRule],
]);
}
Validasi Objek
Untuk memvalidasi objek, kita bisa menggunakan aturan validasi yang sama seperti untuk array. Caranya adalah dengan menunjuk ke properti objek yang ingin kita validasi menggunakan notasi titik.
JSON
{
"user": {
"name": "John Doe",
"email": "[email protected]"
}
}
PHP
$request->validate([
'user.name' => 'required|string',
'user.email' => 'required|email',
]);
Tips Tambahan
Gunakan
required_with
ataurequired_if
: Untuk membuat suatu field wajib diisi jika field lain memiliki nilai tertentu.Gunakan
array
: Untuk memastikan bahwa suatu field adalah sebuah array.Gunakan
in
: Untuk memastikan bahwa nilai suatu field ada dalam daftar nilai yang diizinkan.Manfaatkan
exists
: Untuk memeriksa apakah suatu nilai ada dalam database.
Dengan memahami validasi bersarang di Laravel, Anda dapat membangun aplikasi yang lebih robust dan aman.
Apakah Anda ingin melihat contoh lain atau memiliki pertanyaan lebih lanjut tentang validasi bersarang?