Welcome to the Cookbook

loading...

4.3 Error Handling

The original text for this section has changed since it was translated. Please help resolve this difference. You can:

More information about translations

Di dalam situasi terdapat ralat yang di dapat dibaik pulih di dalam aplikasi anda, ia sepatutnya untuk hentikan proses dan paparkan ralat tersebut kepada pengguna. Untuk selamatkan anda daripada mencipta kod untuk menangani masalah ini didalam setiap controller dan komponen anda, anda boleh gunakan method yang telah diberikan:

$this->cakeError(<string errorType>, [array parameters]);
  1. $this->cakeError(<string errorType>, [array parameters]);

Apabila memanggil method ini, ia akan paparkan satu page kepada pengguna dan akan hentikan apa-apa lagi proses di dalam aplikasi anda.

CakePHP ada satu set jenis-jenis ralat, tetapi semasa menulis, mereka sangat berguna oleh framework CakePHP. Yang paling berguna kepada aplikasi anda adalah ralat 404. Ini boleh dipanggil tanpa apa-apa parameter seperti dibawah:

$this->cakeError('error404');
  1. $this->cakeError('error404');

Atau, anda boleh buatkan page tersebut untuk laporkan ralat tersebut di URL mana dengan menghantar url di dalam parameter:

$this->cakeError('error404', array('url' => 'some/other.url'));
  1. $this->cakeError('error404', array('url' => 'some/other.url'));

Ini akan menjadi sangat berguna dengan menambah 'error handler' kepada anda punya 'error-type'. 'error handler' yang anda cipta selalunya seperti 'controller action'. Anda perlu gunakan set() apa-apa parameters kepada view dan kemudiannya jadikannya satu file di dalam direktori app/views/errors

.

Cipta satu file app/app_error.php dengan definasi dibawah.

<?php
class AppError extends ErrorHandler {
}	
?>
  1. <?php
  2. class AppError extends ErrorHandler {
  3. }
  4. ?>

'Handlers' untuk 'error-types' baru boleh dimasukkan dengan menambah method kepada kelas itu. Hanya perlu buat satu method baru dengan nama yang anda mahu untuk gunakannya sebagai 'error-type' anda.

Jika kita ada satu aplikasi yang akan tulis beberapa nombor file ke sati disk dan ia akan laporkan ralat kepada pengguna. Kita semestinya tidak mahu menulis kesemua kod ini di merata-rata aplikasi kita, jadi ini adalah peluang terbaik untuk gunakan 'error-type' baru kita.

Tambahkan satu method baru didalam kelas AppError. Kita akan ambil satu parameter bernama file yang akan dijadikan jalan kepada file jika kita gagal untuk tuliskannya.

function cannotWriteFile($params) {
  $this->controller->set('file', $params['file']);
  $this->__outputMessage('cannot_write_file');
}
  1. function cannotWriteFile($params) {
  2. $this->controller->set('file', $params['file']);
  3. $this->__outputMessage('cannot_write_file');
  4. }

Cipta view di dalam app/views/errors/cannot_write_file.ctp

<h2>Tidak dapat tulis file</h2>
<p>File <?php echo $file ?> tidak dapat ditulis kepada disk.</p>
  1. <h2>Tidak dapat tulis file</h2>
  2. <p>File <?php echo $file ?> tidak dapat ditulis kepada disk.</p>

dan kemudian paparkan ralat didalam controller/component

$this->cakeError('cannotWriteFile', array('file'=>'somefilename')); 
  1. $this->cakeError('cannotWriteFile', array('file'=>'somefilename'));

Implimentasi ingkar $this->__outputMessage() cuma akan paparkan view tersebut didalam in views/errors/.ctp. Jika anda mahu override behaviour ini, anda boleh definasikan __outputMessage($template) di dalam error class.