0 follower

Penanganan Kesalahan

Yii menyediakan kerangka kerja penanganan kesalahan yang lengkap berdasarkan pada mekanisme eksepsi PHP 5. Saat aplikasi dibuat untuk menangani permintaan pengguna yang masuk, ia meregistrasi metode handleError untuk menangani peringatan dan pemberitahuan PHP; dan meregistrasi metode handleException guna menangani eksepsi PHP yang tidak tertangkap. Konsekuensinya, jika peringatan/pemberitahuan PHP atau eksepsi yang tidak tertangkap terjadi selama eksekusi aplikasi, salah satu pengendali kesalahan akan mengambil alih kontrol dan memulai prosedur penanganan kesalahan tertentu.

Tip: Registrasi pengendali kesalahan dikerjakan dalam pembentuk aplikasi dengan memanggil fungsi PHP set_exception_handler dan set_error_handler. Jika Anda tidak menginginkan Yii menangani kesalahan dan eksepsi, Anda dapat mendefinisikan constant YII_ENABLE_ERROR_HANDLER dan YII_ENABLE_EXCEPTION_HANDLER menjadi false dalam naskah entri.

Standarnya, errorHandler (atau exceptionHandler) akan memunculkan event onError (atau event onException). Jika kesalahan (atau eksepsi) tidak ditangani oleh pengendali event manapun, ia akan memanggil bantuan dari komponen aplikasi errorHandler.

1. Memunculkan Eksepsi

Memunculkan eksepsi dalam Yii tidak berbeda dengan memunculkan eksepsi normal PHP. Anda menggunakan sintaks berikut untuk memunculkan eksepsi bila diperlukan:

throw new ExceptionClass('ExceptionMessage');

Yii mendefinisikan dua kelas eksepsi: CException dan CHttpException. Kelas pertma adalah kelas eksepsi generik, sementara kelas kedua mewakili eksepsi yang harus ditampilkan kepada pengguna akhir. Kelas kedua juga membawa properti statusCode yang mewakili kode status HTTP. Kelas eksepsi menentukan bagaimana ia harus ditampilkan, kita akan menjelaskannya nanti.

Tip: Memunculkan eksepsi CHttpException adalah cara mudah pelaporan kesalahan yang disebabkan oleh kesalahan pengguna mengoperasikan. Sebagai contoh, jika pengguna menyediakan ID tulisan tidak benar dalam URL, kita dapat melakukan hal berikut untuk menampilkan kesalahan 404 (halaman tidak ditemukan):

// jika ID tulisan tidak benar
throw new CHttpException(404,'The specified post cannot be found.');

2. Menampilkan Kesalahan

Ketika kesalahan dioperkan ke komponen aplikasi CErrorHandler, ia memilih tampilan yang sesuai untuk menampilkan kesalahan. Jika kesalahan bertujuan untuk ditampilkan kepada pengguna akhir, seperti misalnya CHttpException, ia akan menggunakan tampilan bernama errorXXX, di mana XXX adalah kode status HTTP (misalnya 400, 404, 500). Jika kesalahan adalah kesalahan internal dan seharusnya hanya ditampilkan kepada pengembang, ia akan menggunakan tampilan bernama exception. Jika kasus yang kedua, informasi jejak panggilan juga baris kesalahan akan ditampilkan.

Info: Ketika aplikasi berjalan dalam mode produksi, semua kesalahan termasuk yang internal akan ditampilkan menggu8nakan tampilan errorXXX. Ini dikarenakan jejak panggilan kesalahan mungkin berisi informasi yang sensitif. Dalam hal ini, pengembang harus bergantung pada log kesalahan untuk menentukan penyebab kesalahan sebenarnya.

CErrorHandler mencari file tampilan terkait untuk sebuah tampilan dengan urutan sebagai berikut:

  1. WebRoot/themes/ThemeName/views/system: ini adalah direktori tampilan system di bawah tema yang aktif saat ini.

  2. WebRoot/protected/views/system: ini adalah direktori tampilan system di bawah aplikasi.

  3. yii/framework/views: ini adalah direktori tampilan sistem standar yang disediakan oleh Yii framework.

Oleh karena itu, jika kita ingin mengkustomisasi tampilan kesalahan, kita cukup membuat file tampilan kesalahan di bawah direktori tampilan sistem pada aplikasi atau tema Anda. Setiap file tampilan adalah naskah PHP normal yang berisi kode HTML. Untuk lebih jelasnya, silahkan merujuk ke file tampilan standar framework di bawah direktori view.

3. Pencatatan Pesan

Pesan tingkat error akan selalu dicatat bila terjadi kesalahan. Jika kesalahan disebabkan oleh peringatan atau pemberitahuan PHP, pesan akan dicatat dengan kategori php; jika kesalahan disebabkan oleh eksepsi tidak tertangkap, kategori akan menjadi exception.ExceptionClassName (untuk CHttpException statusCode juga akan ditambahkan ke kategori). Selanjutnya Anda dapat mengeksploitasi fitur pencatatan untuk memonitor kesalahan yang terjadi selama eksekusi aplikasi.