Kartika IF 5 B
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:
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
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 ... ->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, maka hasilnya seperti dibawah ini
Kita coba dengan
mengisi paramter yang tidak valid
Kita coba dengan
mengisi parameter yang valid
Implementasi Validasi Fungsi Update
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
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/1hanya
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


Komentar
Posting Komentar