PHP Lumen Validation dan Error Handling

 

Deskripsi

Tutorial ini melanjutkan project dari tutorial sebelum nya dengan nama ‘PHP Lumen RestCRUD’. Pada tutorial ini kita akan melakukan handling Validation dan Negative Case. Tujuanpraktek 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 validasidan 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:

Beautify Response Pada Fungsi Read All

Implementasi fungsi ini adalah fungsi index di PostsController.php:
 
Saat ini kalau kita memanggil endpoint ​http://localhost:8000/posts​, maka tampilanresponse nya akan menjadi seperti ini.

Kalau melihat dari response nya ada beberapa data yang tidak kita perlukan, seperti:first_page_url, from, last_page, to. Pertama kita akan mengubah response nya terlebihdahulu.
 
Selanjutnya buka file app/Http/Controllers/PostsController.php, tambahkan 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. 

Dan ketika kita panggil endpoint ​http://localhost:8000/posts​, maka tampilanya sepertidibawah ini. Kita lihat sekarang response nya menjadi lebih clean, dan lebih nyamanuntuk dibaca oleh programmer. Nilai dari next_page_url pada line 5 yakni http://localhost:8000/posts?page=2​, ini adalah url untuk mendapatkan rows di halamankedua. Untuk lanjut ke halaman ke-3 dan seterus nya, kita hanya perlu menggantiparameter page=[halaman].

Ketika kita panggil endpoint ​http://localhost:8000/posts?page=2​, maka hasilnya harusberbeda dengan endpoint ​http://localhost:8000/posts​. Seperti dibawah ini. Kita lihatvalue dari next_page_url pada line 5 adalah null, karena sudah tidak ada lagi rows yang perlu ditampilkan di halaman berikut nya.

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 parametertersebut. Kalau kita coba untuk memberikan value ‘’ pada parameter tersebut, makaaplikasi akan tetap melakukan INSERT ke db. Sekarang kita akan melakukan validasiuntuk parameter tersebut dengan rule seperti dibawah ini:
    - title
      Tidak boleh kosong(required)
      Harus memiliki minimal 5 karakter
    - content
     
    Tidak boleh kosong(required)
      Harus memiliki minimal 10 karakter
    - status
      Tidak boleh kosong(required)
      Hanya bisa diisi oleh dua value ini: published & draft
    - user_id
      Tidak boleh kosong(required)
      Value yang diinput harus ada di databse table users
  3. Itulah rule validasi yang akan kita implementasikan.
  4. Kita akan melakukan pengecekan pada semua parameter, jika validasi lolos maka kitaakan melanjutkan untuk INSERT ke database.
  5. Jika validasi tidak lolos, kita akan memberikan response error dengan status code 400Bad Request. 

Membuat tabel users

Untuk tabel users kita sudah membuatnya di tutorial sebelumnya di Tutorial PHP Lumen Rest CRUD dan ikuti langkah-langkahnya.
Jika kalian ingin melanjutkan tutorial ini silakan sampai sukses membuat tabel saja dan kembali ke tutorial ini.

Implementasi Validasi Fungsi Create

Untuk implementasi validasi pada fungsi create, mari kita ikuti langkah-langkah berikut ini:
Buka file app/Http/Controllers/PostsController.php, tambahkan function store yang ada dibawah ini


di menu header silakan tambahkan
Accept -> application/json dan
Content-type -> application/json

Kita coba dengan mengirimkan parameter null, seperti dibawah ini



Kita coba dengan mengisi paramter yang tidak valid



Kita coba dengan mengisi parameter yang valid


Untuk validasi yang lainnya, anda bisa membuka dokumentasi lumen di link ini​ dan ​ini .

Implementasi Validasi Fungsi Update

Untuk implementasi validasi pada fungsi update, mari kita ikuti langkah-langkah berikut ini:

Buka file app/Http/Controllers/PostsController.php, ubah function update menjadi sepertidibawah ini

Silahkan dicoba beberapa kasus seperti pada fungsi create.

Gambaran Umum Error Handling

Saat ini kita hanya fokus pada positive case saja, kita belum memikirkan apabila ada negativecase. Kita tidak menghiraukan apakah request parameter yang dikirim sudah sesuai denganyang kita harapkan atau belum. Bagaimana seandainya user mengirim request dengan Methodyang 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, makaLumen akan mengembalikan error response Invalid Method seperti gambar dibawah ini.

Kenapa ini terjadi? Karena di file routes/web.php, kita mendefinisikan url inihttp://localhost:8000/posts/1​ hanya menerima method GET, PUT dan DELETE.
Interoperability(WebService)-PHPLumenValidationdanErrorHandlingError response yang diberikan oleh Lumen secara default dalam bentuk HTML. Sekarang kitaakan melakukan Error handling dan memberikan response JSON.

Implementasi Error Handling

Untuk implementasi Error Handling, mari kita ikuti langkah-langkah berikut ini:
Sebetulnya kita sudah melakukan error handling, lihat pada function show, update dandestroy, kita akan menemukan code seperti dibawah ini:

Fungsi abort(404) diatas (contoh pada function show) adalah salah satu implementasierror 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/posts/10​, makatampilannya akan seperti ini

Sekarang kita akan mengubah response tersebut menjadi response dalam bentukJSON.
Buka file app/Exceptions/Handler.php diatas Class definition tambahkan code dibawahini. 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: ketikan Ctrl+C untuk stop dan jalankan kembali

Ketika  kita panggil endpoint POST ​http://localhost:8000/posts/10​, maka tampilannyaakan seperti ini 



Selanjutnya kita panggil endpoint GET ​http://localhost:8000/posts/10​, maka tampilannya akan seperti ini
Silahkan coba-coba dengan case yang lain.

Dan selesai tutorial kali ini.

Komentar

Postingan Populer