I need to load a head view and a foot view in all my pages. But show_error
uses its own complete template. And it stops execution after it loads this template, so t
So, this is how I did it, and it worked perfectly. I extended CI_Exceptions
as suggested by Yan Berk, but I was able to use get_instance
AND load my view.
class MY_Exceptions extends CI_Exceptions {
private $CI;
private $dist;
public function __construct() {
parent::__construct();
$this->CI =& get_instance();
$this->dist = $this->CI->config->item('dist');
}
function show_error($heading, $message, $template = 'error_general', $status_code = 500) {
$head_data = array("title"=>$this->dist['site_title'].": Error");
$head = $this->CI->load->view('head', $head_data, TRUE);
$body = $this->CI->load->view('error_body', $message, TRUE);
echo $head;
echo $body;
}
}
You can create a custom layout to the error messages in the application/errors
directory.
EDIT:
If you want to use your existing files you can do one of the following:
config/route.php
under $route['404_override']
.CI_Exceptions
class with MY_Exceptions
and using plain PHP, redirect the user to the appropriate page. The exceptions class is loaded before the controller so you cannot use get_instance()
.