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
danYII_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.
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.');
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:
WebRoot/themes/ThemeName/views/system
: ini adalah direktori tampilan system
di bawah tema yang aktif saat ini.
WebRoot/protected/views/system
: ini adalah direktori tampilan system
di
bawah aplikasi.
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
.
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.
Signup or Login in order to comment.