Di Joomla core saya menemukan masih banyak panggilan seperti ini:
// Check for errors.
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode("\n", $errors));
return false;
}
Namun JError sudah tidak digunakan lagi sejak Platform merilis 12.1. Jadi bagaimana saya harus menggunakan pengecualian PHP standar.
php
error-handling
jerror
Harald Leithner
sumber
sumber
Jawaban:
Seperti yang dikatakan @DmitryRekun, diskusi yang baik ada di sini . Bagian penting untuk dipertimbangkan dalam semua ini adalah jenis kesalahan apa yang Anda miliki?
Ada dua jenis kesalahan:
Perbedaannya saya cenderung menyimpulkan sebagai berikut:
Sekarang kita tahu apa yang sedang kita hadapi. Apa yang harus kamu lakukan
Jika kesalahan tidak dapat dipulihkan, Anda ingin mengarahkan mereka ke halaman kesalahan alih-alih melanjutkan ke halaman yang diminta . Itu sesederhana berikut ini:
Exception
adalah kelas yang mengambil dua parameter, pesan dan kode. Disarankan untuk mencoba menggunakan Kode Respons HTTP jika sesuai dengan skenario Anda.Jika kesalahan dapat dipulihkan, Anda mungkin hanya ingin menampilkan pesan kembali ke pengguna akhir sambil tetap menunjukkan kepada mereka halaman yang mereka minta. Ini biasanya berarti bahwa Anda harus 'mengirim pesan' untuk aplikasi:
enqueueMessage
mengambil dua parameter, pesan kesalahan dan jenis pesan. Info lebih lanjut di sini (di bagian bawah).Ada juga situasi ketiga yang terjadi cukup sering bagi saya setidaknya. Joomla akan memberikan pengecualian untuk kesalahan yang berbeda (seperti kesalahan permintaan basis data). Ini berarti bahwa Joomla berpikir bahwa kesalahan ini tidak dapat dipulihkan. Namun, Anda mungkin ingin melanjutkan. (Misalnya, jika saya mengubah tabel saat memperbarui ekstensi saya, saya bisa menjalankan
ALTER
kueri, yang akan mengeluarkan pengecualian jika tabel sebelumnya telah diubah.)Dalam hal ini, Anda ingin membungkus kode yang mungkin membuang pengecualian di bagian coba ... catch:
Perhatikan bahwa apa yang Anda lakukan adalah "menangkap" kesalahan yang tidak dapat dipulihkan dan memaksa sistem untuk memulihkan dan terus menampilkan halaman yang diminta.
Tambahkan semua ini dan kasing Anda harus merupakan kesalahan yang tidak dapat dipulihkan. (Saya tahu ini karena Anda memiliki 'return false' setelahnya, jadi Anda kemungkinan tidak berencana untuk melanjutkan dan menyerah pada fungsi.)
Jadi saya akan menulis ulang ini sebagai berikut:
sumber
$this->get('Errors')
karena itu juga sudah usang.JDEBUG
adatrue
.Inilah cara saya mengelola kesalahan.
Lihat atau Kontroler
Jadi jika saya mendapatkan kode 404 dari Model saya (misalnya):
Lalu saya menangkapnya di tampilan atau pengontrol dan melemparkan satu Pengecualian lagi yang akan ditangani Joomla dan akan menampilkan 404 halaman. Untuk yang lain saya hanya menunjukkan beberapa pesan kesalahan umum kepada pengguna.
Baca juga diskusi menarik tentang penanganan kesalahan ini.
sumber
Sebagian besar blok kode seperti ini dapat dengan mudah diganti
enqueueMessage
karena mereka tidak benar-benar bertindak atas kesalahan dan hanya menggunakanJError
untuk mencetaknya.sumber