mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-21 23:46:54 +01:00
105 lines
5.0 KiB
Plaintext
105 lines
5.0 KiB
Plaintext
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|CApplication::handleError]
|
|
untuk menangani peringatan dan pemberitahuan PHP; dan meregistrasi metode
|
|
[handleException|CApplication::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](http://www.php.net/manual/en/function.set-exception-handler.php)
|
|
dan [set_error_handler](http://www.php.net/manual/en/function.set-error-handler.php).
|
|
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](/doc/guide/basics.entry).
|
|
|
|
Standarnya, [errorHandler|CApplication::errorHandler] (atau
|
|
[exceptionHandler|CApplication::exceptionHandler]) akan memunculkan event
|
|
[onError|CApplication::onError] (atau event
|
|
[onException|CApplication::onException]). Jika kesalahan (atau eksepsi)
|
|
tidak ditangani oleh pengendali event manapun, ia akan memanggil bantuan dari
|
|
komponen aplikasi [errorHandler|CErrorHandler].
|
|
|
|
Memunculkan Eksepsi
|
|
-------------------
|
|
|
|
Memunculkan eksepsi dalam Yii tidak berbeda dengan memunculkan eksepsi normal PHP.
|
|
Anda menggunakan sintaks berikut untuk memunculkan eksepsi bila diperlukan:
|
|
|
|
~~~
|
|
[php]
|
|
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|CHttpException::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):
|
|
~~~
|
|
[php]
|
|
// jika ID tulisan tidak benar
|
|
throw new CHttpException(404,'The specified post cannot be found.');
|
|
~~~
|
|
|
|
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](/doc/guide/basics.entry#debug-mode), 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`.
|
|
|
|
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|CHttpException::statusCode] juga akan ditambahkan ke
|
|
kategori). Selanjutnya Anda dapat mengeksploitasi fitur [pencatatan](/doc/guide/topics.logging)
|
|
untuk memonitor kesalahan yang terjadi selama eksekusi aplikasi.
|
|
|
|
<div class="revision">$Id: topics.error.txt 772 2009-02-28 18:23:17Z qiang.xue $</div> |