Yii menyediakan kerangka kerja penanganan error yang lengkap berdasarkan pada mekanisme exception 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 exception PHP yang tidak tertangkap. Konsekuensinya, jika peringatan/pemberitahuan PHP atau exception yang tidak tertangkap terjadi selama eksekusi aplikasi, salah satu pengendali error akan mengambil alih kontrol dan memulai prosedur penanganan error tertentu.
Tip: Registrasi pengendali error dikerjakan dalam pembentuk aplikasi dengan memanggil fungsi PHP set_exception_handler dan set_error_handler. Jika Anda tidak menginginkan Yii menangani error dan exception, Anda dapat mendefinisikan constant
YII_ENABLE_ERROR_HANDLER
danYII_ENABLE_EXCEPTION_HANDLER
menjadi false dalam skrip entri.
Secara default, handlerError (atau handleException) akan memunculkan event onError (atau event onException). Jika error (atau exception) tidak ditangani oleh pengendali event manapun, ia akan memanggil bantuan dari komponen aplikasi errorHandler.
Memunculkan exception dalam Yii tidak berbeda dengan memunculkan exception normal PHP. Anda menggunakan sintaks berikut untuk memunculkan exception bila diperlukan:
throw new ExceptionClass('ExceptionMessage');
Yii mendefinisikan tiga kelas exception: CException, CDbException dan CHttpException. CException adalah kelas exception generik. CDbException mewakiliki exception yang diakibatkan oleh operasi berhubungan dengan DB. CHttpException merupakan exception yang harus ditampilkan kepada pengguna akhir dan membawa sebuah properti statusCode mewakili status kode HTTP Kelas exception menentukan bagaimana ia harus ditampilkan, seperti yang akan dijelaskan nanti.
Tip: Memunculkan exception CHttpException adalah cara mudah pelaporan error yang disebabkan oleh error pengguna mengoperasikan. Sebagai contoh, jika pengguna menyediakan ID tulisan tidak benar dalam URL, kita dapat melakukan hal berikut untuk menampilkan error 404 (halaman tidak ditemukan):
// jika ID tulisan tidak benar
throw new CHttpException(404,'The specified post cannot be found.');
Ketika error dioperkan ke komponen aplikasi CErrorHandler, ia
memilih tampilan yang sesuai untuk menampilkan error. Jika error 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 error adalah error internal dan seharusnya hanya ditampilkan
kepada pengembang, ia akan menggunakan tampilan bernama exception
. Jika kasus yang kedua,
informasi jejak panggilan juga baris error akan
ditampilkan.
Info: Ketika aplikasi berjalan dalam mode produksi, semua error termasuk yang internal akan ditampilkan menggunakan tampilan
errorXXX
. Ini dikarenakan jejak panggilan error mungkin berisi informasi yang sensitif. Dalam hal ini, pengembang harus bergantung pada log error untuk menentukan penyebab error 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 error, kita cukup membuat
file tampilan error di bawah direktori tampilan sistem pada aplikasi atau tema Anda.
Setiap file tampilan adalah skrip PHP normal yang berisi kode HTML.
Untuk lebih jelasnya, silahkan merujuk ke file tampilan standar framework di bawah
direktori view
.
Yii memungkinkan kita menggunakan sebuah action dari controller untuk menangani tugas penampilan error. Untuk itu, kita harus mengatur error handler(penanganan error) dalam konfigurasi aplikasi:
return array(
......
'components'=>array(
'errorHandler'=>array(
'errorAction'=>'site/error',
),
),
);
Pada kode di atas, kita mengkonfigurasi properti CErrorHandler::errorAction untuk menjadi rute
site/error
yang merujuk action error
di SiteController
. Kita akan menggunakan rute yang berbeda
apabila diperlukan
Kita dapat menulis action error
seperti berikut:
public function actionError()
{
if($error=Yii::app()->errorHandler->error)
$this->render('error', $error);
}
Pada action, kita pertama mengambil informasi error yang detail dari CErrorHandler::error.
Jika properti tersebut tidak kosong, kita akan menampilkan view error
bersama dengan informasi error.
Informasi error yang dikembalikan dari CErrorHandler::error adalah sebuah larik(array) dengan field-field berupa:
code
: kode status HTTP (misalnya 403, 500);type
: Jenis error (misalnya CHttpException, PHP Error
);message
: pesan error;file
: nama file skrip PHP yang mengalami error;line
: nomor baris yang menyebabkan error;trace
: call stack dari error tersebut;source
: kode sumber(source code) konteks di tempat error terjadi..Tip: Alasan kita mengecek apakah CErrorHandler::error kosong atau tidak dikarenakan action
error
bisa saja di-request oleh end user secara langsung yang berarti tidak ada error. Karena kita sedang melemparkan larik(array)$error
ke view, kita akan memperluas variabel individu secara otomatis. Sebagai hasilnya, kita dapat mengakses variabel-variabel$code
,$type
secara langsung di view.
Pesan tingkat error
akan selalu dicatat bila terjadi kesalahan. Jika error
disebabkan oleh peringatan atau pemberitahuan PHP, pesan akan dicatat dengan
kategori php
; jika error disebabkan oleh exception tidak tertangkap, kategori
akan menjadi exception.ExceptionClassName
(untuk CHttpException
statusCode juga akan ditambahkan ke
kategori). Selanjutnya Anda dapat mengeksploitasi fitur pencatatan
untuk memonitor error yang terjadi selama eksekusi aplikasi.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.