Membuat Validasi Server Side Form Request di Laravel dengan Laravel Form Request
Halo friends, kali ini aku ada topik bahasan menarik nih seputar pengembangan web dengan Laravel. Bagi kalian yang udah biasa buat web dengan Laravel, saat membuat validasi server side hayo ngaku siapa yang masih ngebuatnya kayak gini di dalem controller wkwkkw.
Wkwkwk jujur aku pas awal-awal belajar laravel sebenarnya masih nulis validasi request di dalam method controller kek diatas. Gaada yang salah sebetulnya sih dalam penerapan kodingan di atas, tapi setelah mempelajari lebih dalam lagi mengenai best practice dalam ngoding di Laravel, agar kodingan yang kita hasilkan tuh lebih clean, ada baiknya hal-hal seperti ini kita pisahkan gitu, ga jadi satu gitu validasi dan message return error-nya di dalam suatu method di controller.
Nah sekarang pertanyaannya, gimana caranya? Ribet ga sih misahin gitu? Eits, tenang kawan, Laravel tuh udah ada sebenarnya bawaan untuk handling validasi request yang masuk kok wkwkw cuma kitanya aja yang belum sadar bahwa ternyata ada. Nih aku kasih tau deh caranya, pokoknya simple dan ga banyak setup deh.
1. Menjalankan Command Untuk Membuat File Form Request
Langkah pertama cukup simpel ya teman-teman yaitu menjalankan sebuah command untuk membuat sebuah file form request di Laravel. Sebagai contoh, berikut merupakan command-nya.
php artisan make:request ProfileRequest
Untuk command-nya sendiri cuma segitu dan nama file form request-nya bisa kalian ubah sesuai kebutuhan kalian saat menjalankan command. Nantinya, file akan di-generate di folder Requests yang ada di path:/app/Http/Requests. Begini tampilan isi dari file request ProfileRequest.
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ProfileRequest extends FormRequest {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
//
];
}
}
2. Kustomisasi File Form Request yang Sudah di Generate
Langkah berikutnya yaitu kustomisasi file form request sesuai kebutuhan validasi dari kita. Berikut merupakan kode contoh hasil kustomisasi dari file form request yang udah aku buat.
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ProfileRequest extends FormRequest {
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
$rules = [
'first_name' => 'required|string|max:255',
'last_name' => 'required|string|max:255',
'email' => 'required|string|email|unique:users,email,' . $this->user()->id,
'phone' => 'required|max:12',
'avatar' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
];
return $rules;
}
/**
* Get the error messages for the defined validation rules.
*
* @return array<string, mixed>
*/
public function messages()
{
$messages = [
'first_name.required' => 'First name is required',
'first_name.string' => 'First name must be a string',
'first_name.max' => 'First name must be less than 255 characters',
'last_name.required' => 'Last name is required',
'last_name.string' => 'Last name must be a string',
'last_name.max' => 'Last name must be less than 255 characters',
'phone.required' => 'Phone is required',
'phone.max' => 'Phone must be less than 12 characters',
'email.required' => 'Email is required',
'email.string' => 'Email must be a string',
'email.email' => 'Email must be a valid email address',
'email.unique' => 'Email already exists',
'avatar.image' => 'Avatar must be an image',
'avatar.mimes' => 'Avatar must be a file of type: jpeg, png, jpg, gif, svg',
'avatar.max' => 'Avatar must be less than 2048 kilobytes',
];
return $messages;
}
}
Dari kode diatas, aku menghilangkan method authorize (karna ga diperluin) dan menambahkan method messages. Sisanya aku tambahin sesuai kebutuhanku, contohnya kolom apa saja yang ingin aku validasi dan error message dari validasinya. Jika sudah, maka akan kita lanjutkan ke cara penggunaannya.
3. Cara Menggunakan Form Request di Controller
Untuk cara make form request-nya gampang guys, di controller kalian, cukup tambahkan use App\Http\Requests\ProfileRequest;
di atas class controller kalian, lalu tambahkan param ProfileRequest $request
di method kalian. Berikut merupakan contoh kodenya.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\ProfileRequest;
class ProfileController extends Controller {
public function update(ProfileRequest $request)
{
$request->user()->update($request->all());
return redirect()->back()->with('success', 'Profile updated successfully');
}
}
Jadi, nanti saat ada error di validasi, maka akan otomatis dilempar ke view kalian tanpa melakukan cek manual dengan if errors lagi di controller, sehingga kode kalian jadi lebih clean. Oiya untuk cara menampilkan error message validasi di view (blade), ini contohnya ya.
@error('first_name')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
Okay guys sekian dulu pembahasan penggunaan file request yang disediakan oleh Laravel. Semoga bermanfaat bagi temen-temen dan terimakasih sudah membaca!
Reference:
[1] https://laravel.com/docs/9.x/validation
[2] https://www.medianova.com/en-blog/laravel-form-request/