Membuat Custom Error View di CakePHP 2.x
Fitur phpcakeError()
di cakePHP 1.x telah di hilangkan dan untuk versi CakePHP 2.x. Sebagai gantinya kita dapat menggunakan Class Exceptions di CakePHP 2.x. Contoh Exception dapat dilihat di controller, jika menggunakan Cake Bake di controller yang telah di generate, misal di fungsi edit akan ada potongan code seperti "php throw new NotFoundException()
", inilah contoh dari penggunaan Exception di CakePHP.
Tapi view untuk Exception bawaan cakephp menggunakan layout default cakephp, bagaimana bila kita ingin mengubah view dari exception tersebut, berikut cara untuk custom error CakePHP 2.x.
Pertama kita tambahkan baris berikut di core.php
Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'AppExceptionRenderer',
'log' => true
));
Script diatas adalah untuk konfigurasi Excetion, untuk penjelasan konfigurasi tersebut bisa dibaca di book cakephp. Selanjutnya kita buat sebuah controller baru misal ErrorsController.php.
<?php
class ErrorsController extends AppController {
public $name = "Errors";
public function beforeFilter()
{
parent::beforeFilter();
$this->Auth->allow('error404');
}
public function error404()
{
//$this->layout = 'default';
}
}
?>
Selanjutnya buat file AppExceptionRenderer.php di dalam lib, (/app/Lib/Error/AppExceptionRenderer.php)
<?php
App::uses('ExceptionRenderer', 'Error');
class AppExceptionRenderer extends ExceptionRenderer {
public function missingController($error) {
$this->controller->render('/Errors/error404', 'error');
$this->controller->response->send();
}
public function missingAction($error) {
$this->missingController($error);
}
public function notFound($error) {
$this->missingController($error);
}
}
?>
Kemudian buat file layout baru dengan nama "error" , pada script diatas menggunakan layout error
$this->controller->render('/Errors/error404', 'error');
Jika ada exception baru tinggal ditambahakan didalam AppExceptionRenderer.php, dan bila ingin meng-custom masing-masing view tinggal gunakan script seperti missingController dengen render & layout yang berbeda.
sumber: