Maaf, saya ulangi, sepertinya ada kesalahan pada permintaan sebelumnya. Berikut adalah artikel tentang Tutorial Laravel #18 : Form Validasi Laravel:
Dalam pengembangan web menggunakan Laravel, validasi data dari form adalah langkah krusial untuk memastikan data yang masuk ke aplikasi kita sesuai dengan yang diharapkan. Laravel menyediakan fitur validasi yang kuat dan mudah digunakan. Pada tutorial kali ini, kita akan membahas secara mendalam tentang form validasi di Laravel.
Apa Itu Validasi Form?
Validasi form adalah proses memverifikasi data yang dikirimkan melalui form sebelum data tersebut diproses lebih lanjut (misalnya, disimpan ke database). Tujuannya adalah untuk mencegah data yang tidak valid, tidak lengkap, atau berbahaya masuk ke dalam sistem kita.
Cara Kerja Validasi di Laravel
Laravel menyediakan beberapa cara untuk melakukan validasi, namun yang paling umum adalah menggunakan Request Validation. Berikut adalah alur kerjanya:
- Membuat Request Class (Opsional): Anda bisa membuat class request khusus untuk validasi yang lebih terstruktur.
- Mendefinisikan Aturan Validasi: Di dalam controller atau request class, Anda mendefinisikan aturan-aturan validasi untuk setiap field form.
- Laravel Melakukan Validasi: Ketika form disubmit, Laravel secara otomatis menjalankan aturan validasi yang telah Anda definisikan.
- Menangani Hasil Validasi:
- Berhasil: Jika semua aturan validasi terpenuhi, request akan diteruskan ke action controller yang dituju.
- Gagal: Jika ada aturan yang tidak terpenuhi, Laravel akan secara otomatis melakukan redirect kembali ke halaman form sebelumnya dan menyertakan pesan-pesan error.
Contoh Sederhana Validasi di Controller
Mari kita buat contoh sederhana validasi pada sebuah form pendaftaran user. Anggaplah kita memiliki route dan view seperti berikut:
routes/web.php:
“`php
Route::get(‘/register’, ‘AuthController@showRegistrationForm’);
Route::post(‘/register’, ‘AuthController@register’);
“`
resources/views/register.blade.php:
“`blade
<form method=”POST” action=”/register”>
@csrf
<div>
<label for=”name”>Nama:</label>
<input type=”text” id=”name” name=”name”>
@error(‘name’)
<div class=”alert alert-danger”>{{ $message }}</div>
@enderror
</div>
<div>
<label for=”email”>Email:</label>
<input type=”email” id=”email” name=”email”>
@error(’email’)
<div class=”alert alert-danger”>{{ $message }}</div>
@enderror
</div>
<div>
<label for=”password”>Password:</label>
<input type=”password” id=”password” name=”password”>
@error(‘password’)
<div class=”alert alert-danger”>{{ $message }}</div>
@enderror
</div>
<button type=”submit”>Daftar</button>
</form>
“`
Sekarang, mari kita tambahkan logika validasi di dalam controller AuthController:
app/Http/Controllers/AuthController.php:
“`php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class AuthController extends Controller
{
public function showRegistrationForm()
{
return view(‘register’);
}
public function register(Request $request)
{
// Aturan Validasi
$rules = [
‘name’ => ‘required|string|max:255′,
’email’ => ‘required|string|email|max:255|unique:users’,
‘password’ => ‘required|string|min:8|confirmed’,
];
// Pesan Error Kustom (Opsional)
$messages = [
'name.required' => 'Nama wajib diisi.',
'email.required' => 'Email wajib diisi.',
'email.email' => 'Format email tidak valid.',
'email.unique' => 'Email ini sudah terdaftar.',
'password.required' => 'Password wajib diisi.',
'password.min' => 'Password minimal terdiri dari 8 karakter.',
'password.confirmed' => 'Konfirmasi password tidak sesuai.',
];
// Melakukan Validasi
$request->validate($rules, $messages);
// Jika validasi berhasil, lanjutkan proses pendaftaran
// Contoh: menyimpan user ke database
// \App\Models\User::create([
// 'name' => $request->name,
// 'email' => $request->email,
// 'password' => bcrypt($request->password),
// ]);
return redirect('/')->with('success', 'Pendaftaran berhasil!');
}
}
“`
Penjelasan:
- Di dalam method
register, kita mendefinisikan sebuah array$rulesyang berisi aturan validasi untuk setiap field form (name,email,password).required: Field wajib diisi.string: Field harus berupa string.max:255: Panjang maksimal 255 karakter.email: Field harus berupa format email yang valid.unique:users: Field harus unik di dalam tabelusers(biasanya untuk email).min:8: Panjang minimal 8 karakter.confirmed: Harus memiliki field dengan nama yang sama ditambah_confirmation(dalam kasus ini,password_confirmation) dan nilainya harus sama.
- Array
$messagesberisi pesan error kustom yang akan ditampilkan jika validasi gagal. Jika tidak didefinisikan, Laravel akan menggunakan pesan error default. - Method
$request->validate($rules, $messages)akan menjalankan proses validasi. Jika validasi gagal, sebuah exception akan dilempar dan Laravel secara otomatis akan melakukan redirect kembali ke halaman form dengan pesan-pesan error. - Jika validasi berhasil, kode di bawah
$request->validate()akan dieksekusi (dalam contoh ini, hanya komentar). @error('nama_field')pada view Blade digunakan untuk menampilkan pesan error spesifik untuk field tersebut.
Membuat Request Class
Untuk validasi yang lebih kompleks dan terorganisir, Anda bisa menggunakan Request Class. Untuk membuatnya, gunakan Artisan CLI:
“`bash
php artisan make:request StoreUserRequest
“`
Ini akan membuat file app/Http/Requests/StoreUserRequest.php. Di dalam file ini, Anda perlu mendefinisikan aturan validasi pada method rules() dan mengatur otorisasi pada method authorize() (biasanya diatur ke true).
app/Http/Requests/StoreUserRequest.php:
“`php
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
‘name’ => ‘required|string|max:255′,
’email’ => ‘required|string|email|max:255|unique:users’,
‘password’ => ‘required|string|min:8|confirmed’,
];
}
/**
* Get the error messages for the defined validation rules.
*
* @return array
*/
public function messages()
{
return [
‘name.required’ => ‘Nama wajib diisi.’,
’email.required’ => ‘Email wajib diisi.’,
’email.email’ => ‘Format email tidak valid.’,
’email.unique’ => ‘Email ini sudah terdaftar.’,
‘password.required’ => ‘Password wajib diisi.’,
‘password.min’ => ‘Password minimal terdiri dari 8 karakter.’,
‘password.confirmed’ => ‘Konfirmasi password tidak sesuai.’,
];
}
}
“`
Kemudian, di dalam controller, Anda cukup type-hint request class ini:
app/Http/Controllers/AuthController.php:
“`php
<?php
namespace App\Http\Controllers;
use App\Http\Requests\StoreUserRequest;
use Illuminate\Http\Request;
class AuthController extends Controller
{
public function showRegistrationForm()
{
return view(‘register’);
}
public function register(StoreUserRequest $request)
{
// Validasi sudah ditangani oleh StoreUserRequest
// Lanjutkan proses pendaftaran
// \App\Models\User::create([
// ‘name’ => $request->name,
// ’email’ => $request->email,
// ‘password’ => bcrypt($request->password),
// ]);
return redirect('/')->with('success', 'Pendaftaran berhasil!');
}
}
“`
Dengan menggunakan Request Class, kode controller Anda menjadi lebih bersih dan fokus pada logika bisnis, sementara aturan validasi terpusat di satu tempat.
Aturan Validasi yang Umum Digunakan
Laravel menyediakan berbagai macam aturan validasi. Berikut beberapa yang sering digunakan:
required: Wajib diisi.string: Harus berupa string.integer: Harus berupa integer.numeric: Harus berupa angka.email: Harus berupa format email yang valid.url: Harus berupa format URL yang valid.min:value: Minimalvaluekarakter/angka.max:value: Maksimalvaluekarakter/angka.between:min,max: Berada di antara nilaimindanmax.confirmed: Harus memiliki fieldnama_field_confirmationyang sama nilainya.unique:table,column,except,idColumn: Harus unik di dalam tabel database.exists:table,column: Harus ada di dalam tabel database.date: Harus berupa format tanggal yang valid.boolean: Harus berupa nilai boolean (true/false, 0/1, “true”/”false”, dll.).array: Harus berupa array.file: Harus berupa file yang diupload.image: Harus berupa file gambar.- Dan masih banyak lagi! Anda dapat melihat daftar lengkapnya di dokumentasi resmi Laravel.
Validasi Bersyarat
Terkadang, Anda mungkin perlu menerapkan aturan validasi hanya pada kondisi tertentu. Laravel menyediakan method sometimes() untuk hal ini.
“`php
$request->validate([
‘name’ => ‘required|string|max:255′,
’email’ => ‘required|string|email|max:255|unique:users’,
‘age’ => ‘nullable|integer|min:18’, // Umur boleh kosong atau minimal 18
‘occupation’ => ‘required_if:age,>=,18’, // Profesi wajib diisi jika umur >= 18
]);
“`
Pada contoh di atas, field occupation hanya akan divalidasi required jika nilai dari field age lebih besar atau sama dengan 18.
Custom Validation Rules
Anda juga dapat membuat aturan validasi kustom sendiri menggunakan Artisan CLI:
“`bash
php artisan make:rule Uppercase
“`
Ini akan membuat file app/Rules/Uppercase.php. Di dalam file ini, Anda perlu mengimplementasikan method passes($attribute, $value) yang mengembalikan true jika validasi berhasil dan false jika gagal, serta method message() yang mengembalikan pesan error kustom.
Setelah membuat rule kustom, Anda dapat menggunakannya di dalam aturan validasi Anda:
“`php
$request->validate([
‘name’ => [‘required’, new Uppercase],
]);
“`
Kesimpulan
Form validasi adalah bagian penting dalam pengembangan aplikasi web Laravel. Dengan fitur validasi yang disediakan oleh Laravel, Anda dapat dengan mudah mengamankan aplikasi Anda dari data yang tidak valid dan memberikan feedback yang jelas kepada pengguna melalui pesan-pesan error. Memanfaatkan Request Class untuk validasi yang lebih terstruktur sangat direkomendasikan untuk proyek yang lebih besar. Pada tutorial selanjutnya, kita akan membahas topik menarik lainnya dalam pengembangan Laravel. Tetap ikuti seri tutorial ini!
Apakah ada aspek spesifik lain tentang validasi form di Laravel yang ingin Anda ketahui lebih lanjut? Misalnya, validasi AJAX, validasi array, atau kustomisasi tampilan pesan error? Beri tahu saya jika Anda memiliki pertanyaan!