/docs/guide/id/topics.error.txt
Plain Text | 155 lines | 126 code | 29 blank | 0 comment | 0 complexity | 1fbfc8ccfc3b50b83f3811001d3d38cc MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.1, BSD-2-Clause
- Penanganan Error
- ================
- Yii menyediakan kerangka kerja penanganan error 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
- 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](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 error dan eksepsi, Anda dapat mendefinisikan
- constant `YII_ENABLE_ERROR_HANDLER` dan `YII_ENABLE_EXCEPTION_HANDLER` menjadi
- false dalam [skrip 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 error (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
- 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):
- ~~~
- [php]
- // jika ID tulisan tidak benar
- throw new CHttpException(404,'The specified post cannot be found.');
- ~~~
- Menampilkan error
- ---------------------
- 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](/doc/guide/basics.entry#debug-mode), 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:
- 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 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`.
- ### Penanganan Error dengan Penggunaan Action(Aksi)
- Mulai dari Yii versi 1.0.6, Yii memungkinkan kita menggunakan sebuah [action dari controller](/doc/guide/basics.controller#action)
- untuk menangani tugas penampilan error. Untuk itu, kita harus mengatur error handler(penanganan error) dalam konfigurasi aplikasi:
- ~~~
- [php]
- 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 aksi `error` di `SiteController`. Kita akan menggunakan rute yang berbeda
- apabila diperlukan
- Kita dapat menulis aksi `error` seperti berikut:
- ~~~
- [php]
- 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
- aksi `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.
- Pencatatan Pesan
- ----------------
- 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 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 error yang terjadi selama eksekusi aplikasi.
- <div class="revision">$Id: topics.error.txt 1064 2009-05-26 00:15:33Z qiang.xue $</div>