Validasi data merupakan hal yang sangat penting untuk memastikan input dari user agar sesuai dengan kebutuhan yang kita perlukan, misalnya jika kita perlu menyimpan email dari user, maka user hanya dibolehkan untuk menginput data dengan format email. Selain itu, validasi data juga diperlukan untuk menghindari perusakan aplikasi dengan metode injection, seperti XSS Injection misalnya.
Laravel telah menyediakan kemudahan bagi kita untuk memvalidasi input dari pengguna. Umumnya terdapat 3 cara untuk memvalidasi input pengguna dengan menggunakan Laravel. Pada tutorial ini kita tidak akan membahas secara detail ketiganya, kita hanya akan membahas mengenai cara penulisan dan mengapa harus mempertimbangkan menggunakan FormRequest untuk validasi agar kode yang kita tulis lebih clean.
Sekarang mari kita lihat bagaimana cara penulisan validasi dari masing-masing.
Facade Validator
Dibawah ini merupakan contoh penulisan validasi dengan menggunakan facade Validator.
class RoleController extends Controller { public function store(Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required|max:30', ]); if ($validator->fails()) { redirect()->back() ->withErrors($validator->errors()); } } }
Controller Helper
Controller sendiri memiliki sebuah helper method dengan nama validate()
untuk memvalidasi request dari pengguna yang di deklarasikan pada trait \Illuminate\Foundation\Validation\ValidatesRequests
. Jika kita lihat, base controller yang kita gunakan ketika pertama kali menginstall Laravel menggunakan trait ini.
namespace App\Http\Controllers; class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests; }
Berikut ini contoh penggunaan method validate
pada controller untuk memvalidasi input dari pengguna.
class RoleController extends Controller { public function store(Request $request) { $this->validate($request, [ 'name' => 'required|max:30', ]); // } }
Tidak ada yang salah dengan menggunakan kedua cara diatas untuk memvalidasi input dari user. Ini hanyalah masalah standarisasi dan pemilihan cara dari developer itu sendiri. Saya pribadi lebih memilih menggunakan cara ketiga yaitu menggunakan FormRequest.
Dengan menggunakan FormRequest semua aturan validasi di deskripsikan pada class terpisah, dengan kata lain diluar class controller itu sendiri. Dengan memisahkan semua aturan validasi pada form request, tentu saja baris kode yang kita tulis di controller pun menjadi lebih sedikit. Untuk anda yang menganut konsep “thin controller” tentu akan mempertimbangkan menggunakan FormRequest untuk validasi input dari pengguna.
FormRequest
Validasi menggunakan FormRequest memang memerlukan beberapa langkah lebih banyak dan terkesan rumit diawal. Akan tetapi, menurut saya ada beberapa keuntungan yang bisa kita dapatkan, contohnya controller menjadi lebih ramping dan lebih mudah dibaca, karena validasi disimpan pada satu tempat sehingga proses maintenance dan debugging akan lebih mudah.
Langkah pertama untuk memvalidasi data menggunakan FormRequest, kita harus membuat sebuah class FormRequest dengan menggunakan perintah artisan, sebagai contoh:
php artisan make:request RoleRequest
Perintah diatas akan menghasilkan file baru pada direktori app/Http/Requests
dengan nama file RoleRequest.php. Secara default, terdapat 2 method pada class hasil generate perintah artisan diatas, yaituauthorize()
dan rules()
.
Method authorize
Method authorize
digunakan untuk memastikan bahwa user dibolehkan untuk membuat request. Nilai dari method authorize
ini harus mengembalikan nilai true
agar user dapat melanjutkan ke proses validasi. Method ini bisa digunakan dalam berbagai keperluan, misalnya hanya pengguna yang sudah login yang dapat melakukan request dan melanjutkan proses validasi.
/** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return Auth::check(); }
Method rules
Method inilah yang kita gunakan untuk mendefinisikan semua aturan validasi yang akan kita gunakan untuk memvalidasi sebuah request dari pengguna.
/** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'name' => 'required|max:30', ]; }
Kode lengkap dari contoh FormRequest diatas akan terlihat kurang lebih seperti ini. Kita hanya perlu menyesuaikan aturan validasi yang akan digunakan pada method rules
.
class RoleRequest 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|max:30', ]; } }
Masih terdapat banyak method yang bisa kita gunakan pada class FormRequest, seperti custom pesan error, custom attribute dan lainnya. Kita akan membahas lebih detail penggunaan FormRequest pada tutorial lainnya.
Itulah ketiga cara umum yang digunakan untuk memvalidasi input pengguna dengan menggunakan Laravel. Mana yang anda pilih? Silahkan tentukan sesuai dengan pilihan dan kenyamanan dari anda sendiri.
No Comments
Leave a comment Cancel