PageRenderTime 49ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/docs/guide/id/topics.error.txt

https://bitbucket.org/21h/torchok-anon
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
  1. Penanganan Error
  2. ================
  3. Yii menyediakan kerangka kerja penanganan error yang lengkap berdasarkan
  4. pada mekanisme eksepsi PHP 5. Saat aplikasi dibuat untuk menangani permintaan
  5. pengguna yang masuk, ia meregistrasi metode [handleError|CApplication::handleError]
  6. untuk menangani peringatan dan pemberitahuan PHP; dan meregistrasi metode
  7. [handleException|CApplication::handleException] guna menangani eksepsi PHP
  8. yang tidak tertangkap. Konsekuensinya, jika peringatan/pemberitahuan PHP atau eksepsi
  9. yang tidak tertangkap terjadi selama eksekusi aplikasi, salah satu pengendali
  10. error akan mengambil alih kontrol dan memulai prosedur penanganan error
  11. tertentu.
  12. > Tip: Registrasi pengendali error dikerjakan dalam pembentuk aplikasi
  13. dengan memanggil fungsi PHP
  14. [set_exception_handler](http://www.php.net/manual/en/function.set-exception-handler.php)
  15. dan [set_error_handler](http://www.php.net/manual/en/function.set-error-handler.php).
  16. Jika Anda tidak menginginkan Yii menangani error dan eksepsi, Anda dapat mendefinisikan
  17. constant `YII_ENABLE_ERROR_HANDLER` dan `YII_ENABLE_EXCEPTION_HANDLER` menjadi
  18. false dalam [skrip entri](/doc/guide/basics.entry).
  19. Standarnya, [errorHandler|CApplication::errorHandler] (atau
  20. [exceptionHandler|CApplication::exceptionHandler]) akan memunculkan event
  21. [onError|CApplication::onError] (atau event
  22. [onException|CApplication::onException]). Jika error (atau eksepsi)
  23. tidak ditangani oleh pengendali event manapun, ia akan memanggil bantuan dari
  24. komponen aplikasi [errorHandler|CErrorHandler].
  25. Memunculkan Eksepsi
  26. -------------------
  27. Memunculkan eksepsi dalam Yii tidak berbeda dengan memunculkan eksepsi normal PHP.
  28. Anda menggunakan sintaks berikut untuk memunculkan eksepsi bila diperlukan:
  29. ~~~
  30. [php]
  31. throw new ExceptionClass('ExceptionMessage');
  32. ~~~
  33. Yii mendefinisikan dua kelas eksepsi: [CException] dan [CHttpException]. Kelas
  34. pertma adalah kelas eksepsi generik, sementara kelas kedua mewakili eksepsi
  35. yang harus ditampilkan kepada pengguna akhir. Kelas kedua juga membawa properti
  36. [statusCode|CHttpException::statusCode] yang mewakili kode status HTTP.
  37. Kelas eksepsi menentukan bagaimana ia harus ditampilkan,
  38. kita akan menjelaskannya nanti.
  39. > Tip: Memunculkan eksepsi [CHttpException] adalah cara mudah pelaporan
  40. error yang disebabkan oleh error pengguna mengoperasikan. Sebagai contoh, jika pengguna menyediakan
  41. ID tulisan tidak benar dalam URL, kita dapat melakukan hal berikut untuk menampilkan error 404
  42. (halaman tidak ditemukan):
  43. ~~~
  44. [php]
  45. // jika ID tulisan tidak benar
  46. throw new CHttpException(404,'The specified post cannot be found.');
  47. ~~~
  48. Menampilkan error
  49. ---------------------
  50. Ketika error dioperkan ke komponen aplikasi [CErrorHandler], ia
  51. memilih tampilan yang sesuai untuk menampilkan error. Jika error bertujuan untuk
  52. ditampilkan kepada pengguna akhir, seperti misalnya [CHttpException], ia akan menggunakan
  53. tampilan bernama `errorXXX`, di mana `XXX` adalah kode status HTTP (misalnya
  54. 400, 404, 500). Jika error adalah error internal dan seharusnya hanya ditampilkan
  55. kepada pengembang, ia akan menggunakan tampilan bernama `exception`. Jika kasus yang kedua,
  56. informasi jejak panggilan juga baris error akan
  57. ditampilkan.
  58. > Info: Ketika aplikasi berjalan dalam [mode
  59. produksi](/doc/guide/basics.entry#debug-mode), semua error termasuk yang internal
  60. akan ditampilkan menggunakan tampilan `errorXXX`. Ini dikarenakan jejak panggilan
  61. error mungkin berisi informasi yang sensitif. Dalam hal ini,
  62. pengembang harus bergantung pada log error untuk menentukan penyebab error
  63. sebenarnya.
  64. [CErrorHandler] mencari file tampilan terkait untuk sebuah tampilan dengan urutan
  65. sebagai berikut:
  66. 1. `WebRoot/themes/ThemeName/views/system`: ini adalah direktori tampilan `system`
  67. di bawah tema yang aktif saat ini.
  68. 2. `WebRoot/protected/views/system`: ini adalah direktori tampilan `system` di
  69. bawah aplikasi.
  70. 3. `yii/framework/views`: ini adalah direktori tampilan sistem standar yang
  71. disediakan oleh Yii framework.
  72. Oleh karena itu, jika kita ingin mengkustomisasi tampilan error, kita cukup membuat
  73. file tampilan error di bawah direktori tampilan sistem pada aplikasi atau tema Anda.
  74. Setiap file tampilan adalah skrip PHP normal yang berisi kode HTML.
  75. Untuk lebih jelasnya, silahkan merujuk ke file tampilan standar framework di bawah
  76. direktori `view`.
  77. ### Penanganan Error dengan Penggunaan Action(Aksi)
  78. Mulai dari Yii versi 1.0.6, Yii memungkinkan kita menggunakan sebuah [action dari controller](/doc/guide/basics.controller#action)
  79. untuk menangani tugas penampilan error. Untuk itu, kita harus mengatur error handler(penanganan error) dalam konfigurasi aplikasi:
  80. ~~~
  81. [php]
  82. return array(
  83. ......
  84. 'components'=>array(
  85. 'errorHandler'=>array(
  86. 'errorAction'=>'site/error',
  87. ),
  88. ),
  89. );
  90. ~~~
  91. Pada kode di atas, kita mengkonfigurasi properti [CErrorHandler::errorAction] untuk menjadi rute
  92. `site/error` yang merujuk aksi `error` di `SiteController`. Kita akan menggunakan rute yang berbeda
  93. apabila diperlukan
  94. Kita dapat menulis aksi `error` seperti berikut:
  95. ~~~
  96. [php]
  97. public function actionError()
  98. {
  99. if($error=Yii::app()->errorHandler->error)
  100. $this->render('error', $error);
  101. }
  102. ~~~
  103. Pada action, kita pertama mengambil informasi error yang detail dari [CErrorHandler::error].
  104. Jika properti tersebut tidak kosong, kita akan menampilkan view `error` bersama dengan informasi error.
  105. Informasi error yang dikembalikan dari [CErrorHandler::error] adalah sebuah larik(array) dengan field-field berupa:
  106. * `code`: kode status HTTP (misalnya 403, 500);
  107. * `type`: Jenis error (misalnya [CHttpException], `PHP Error`);
  108. * `message`: pesan error;
  109. * `file`: nama file skrip PHP yang mengalami error;
  110. * `line`: nomor baris yang menyebabkan error;
  111. * `trace`: call stack dari error tersebut;
  112. * `source`: kode sumber(source code) konteks di tempat error terjadi..
  113. > Tip: Alasan kita mengecek apakah [CErrorHandler::error] kosong atau tidak dikarenakan
  114. aksi `error` bisa saja di-request oleh end user secara langsung yang berarti tidak ada error.
  115. Karena kita sedang melemparkan larik(array) `$error` ke view, kita akan memperluas variabel individu
  116. secara otomatis. Sebagai hasilnya, kita dapat mengakses variabel-variabel `$code`, `$type` secara langsung di view.
  117. Pencatatan Pesan
  118. ----------------
  119. Pesan tingkat `error` akan selalu dicatat bila terjadi kesalahan. Jika error
  120. disebabkan oleh peringatan atau pemberitahuan PHP, pesan akan dicatat dengan
  121. kategori `php`; jika error disebabkan oleh eksepsi tidak tertangkap, kategori
  122. akan menjadi `exception.ExceptionClassName` (untuk [CHttpException]
  123. [statusCode|CHttpException::statusCode] juga akan ditambahkan ke
  124. kategori). Selanjutnya Anda dapat mengeksploitasi fitur [pencatatan](/doc/guide/topics.logging)
  125. untuk memonitor error yang terjadi selama eksekusi aplikasi.
  126. <div class="revision">$Id: topics.error.txt 1064 2009-05-26 00:15:33Z qiang.xue $</div>