PHP LUMEN VALIDATION AND ERROR HANDLING
Deskripsi
Tutorial ini melanjutkan project dari tutorial sebelum nya dengan nama ‘PHP Lumen Rest
CRUD’. Pada tutorial ini kita akan melakukan handling Validation dan Negative Case. Tujuan
praktek ini adalah untuk:
1. Mampu implementasi validation menggunakan Lumen
2. Mampu melakukan Negative Case handling menggunakan Lumen
3. Mampu memberikan informasi yang baik dan relevan ketika mengalami error validasi
dan error negative case
Prasyarat
Harus menyelesaikan dulu modul dengan judul ‘PHP Lumen Rest CRUD’.
Endpoint
Saat ini kita sudah mengimplementasikan endpoint yang akan kita gunakan, yakni seperti ini:
Method (HTTP Verbs) Endpoint Description
GET /posts Get list of all post
GET /post/{postId} Get single post
POST /users Create new post
PUT /post/{postId} Update single post
DELETE /post/{postId} Delete single post
Beautify Response Pada Fungsi Read All
Implementasi fungsi ini adalah fungsi index di PostsController.php:
Saat ini jika kita memanggil endpoint http://localhost:8000/posts ,Pertama kita akan mengubah response nya terlebih dahulu.Buka file app/Http/Controllers/PostsController.php, ubah function index menjadi seperti dibawah ini. Pada line 17 … ->pagination(2), nilai 2 bisa anda ubah2. Nilai ini adalah
berapa jumlah rows yang akan ditampilkan dalam satu halaman.
Ketika kita panggil endpoint http://localhost:8000/posts maka tampilannya seperti di baeah ini . sekarang respnnya menjadi lebih clean . nilai dari next_page_url pada line 5 yakni http://localhost:8000/post?page=2 ini adalah url untuk lanjut ke halaman ke-3 dan seterusnya kita hanya perlu mengganti parameter page halamannya saja.
seperti gambar dibawah ini
htttp/localhost:8000/post
http://localhost:8000/post?page=2
Validasi Fungsi Create
Untuk membuat validasi pada fungsi create, mari kita ikuti langkah-langkah berikut ini:
1. Saat ini fungsi create memiliki beberapa parameter, diantaranya adalah:
- title
- content
- status
- user_id
2. Parameter tersebut belum divalidasi, artinya semua nilai bisa kita masukan ke parameter
tersebut. Kalau kita coba untuk memberikan value ‘’ pada parameter tersebut, maka
aplikasi akan tetap melakukan INSERT ke db. Sekarang kita akan melakukan validasi
untuk parameter tersebut dengan rule seperti dibawah ini:
- title:
a. Tidak boleh kosong (required)
b. Harus memiliki minimum 5 karakter
- content:
b. Harus memiliki minimum 10 karakter
- status:
a. Tidak boleh kosong (required)
b. Hanya bisa diisi oleh dua value ini: published dan draft
- user_id:
a. Tidak boleh kosong (required)
b. Value yang di input harus ada di database table users .
3. Itulah rule validasi yang akan kita implementasikan.
4. Kita akan melakukan pengecekan pada semua parameter, jika validasi lolos maka kita
akan melanjutkan untuk INSERT ke database.
5. Jika validasi tidak lolos, kita akan memberikan response error dengan status code 400
Bad Request.
Membuat table Users
pada blog sebelumnya sudah di buat membuat table users. dengan membuat di cmd
php artisan make:migration create_users_table
Buka file database/migrations/...create_users_table.php, dan ubah menjadi seperti dibawah ini
jalankan Command dibawah ini pada terminal php artisan migrate kemudian insert satu row ke table users dan selesai
Implementasi Validasi Fungsi Create
Buka file app/Http/Controllers/PostController.php ubah function seperti dibawah ini
Kita coba dengan mengirimkan parameter null seperti dibawah ini:
Kita coba dengan isi parameter yang tidak valid
Kita coba dengan isi parameter yang valid
Selesai
Implementasi Validasi Fungsi Update
Buka file app/Http/Controllers/PostsController.php, ubah function update menjadi seperti
dibawah ini
Gambaran Umum Error Handling
Saat ini kita hanya fokus pada positive case saja, kita belum memikirkan apabila ada negative
case. Kita tidak menghiraukan apakah request parameter yang dikirim sudah sesuai dengan yang kita harapkan atau belum. Bagaimana seandainya user mengirim request dengan Method
yang salah? Bagaimana apabila ID yang dikirim tidak ada di database ketika melakukan
Update, Delete atau Show?
Pada dasarnya Lumen sudah menyediakan Error Handling untuk menangani masalah tersebut.
Sebagai contoh, jika kita mengakses http://localhost:8000/posts/1 dengan method POST, maka
Lumen akan mengembalikan error response Invalid Method seperti gambar dibawah ini.
Kenapa ini terjadi? Karena di file routes/web.php, kita mendefinisikan url ini
http://localhost:8000/posts/1 hanya menerima method GET, PUT dan DELETE.
akan melakukan Error handling dan memberikan response JSON.
Implementasi Error Handling
Sebetulnya kita sudah melakukan error handling, lihat pada function show, update dan
destroy, kita akan menemukan code seperti dibawah ini:
Fungsi abort(404) diatas (contoh pada function show) adalah salah satu implementasi
error handling. Hanya saja implementasi ini belum memberikan error response JSON, masih berbentuk HTML yang merupakan fungsi bawaan dari Lumen.
Sebagai contoh kalau kita panggil endpoint GET http://localhost:8000/post akan seperti berikut:
Buka file app/Exceptions/Handler.php diatas Class definition tambahkan code dibawah
ini. Line 12-15.
Buka file app/Exceptions/Handler.php ubah function render menjadi seperti dibawah ini.
Buka file .env ubah APP_DEBUG=true
manjadi APP_DEBUG=false
Restart server
Ketika kita panggil endpoint GET http://localhost:8000/post/10 , maka tampilannya akan seperti ini:
Ketika kita panggil endpoint POST http://localhost:8000/post/10 , maka tampilannya akan seperti ini:
Ketika kita panggil endpoint PUT http://localhost:8000/post/10 , maka tampilannya akan seperti ini:
Ketika kita panggil endpoint DELETE http://localhost:8000/post/10 , maka tampilannya akan seperti ini:
Selesai
Komentar
Posting Komentar