Files
yii/docs/guide/id/topics.error.txt
2009-05-10 18:45:26 +00:00

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>