まず、application/errors/error_*.phpをいじればデザインは変えられる。
変数とかを渡したい場合は、application/core/MY_Exceptions.phpを用意する。
error_general.phpでモバイル判定をしたかったので、show_errorでCIを追加する。
他の部分はとりあえずCI_Exceptionsと同じにしてある。
function show_error($heading, $message, $template = 'error_general', $status_code = 500)
{
set_status_header($status_code);
// 追加部分
$CI =& get_instance();
$CI->load->library('user_agent');
// 追加ここまで
$message = ''.implode('
', ( ! is_array($message)) ? array($message) : $message).'
';
if (ob_get_level() > $this->ob_level + 1)
{
ob_end_flush();
}
ob_start();
include(APPPATH.'errors/'.$template.'.php');
$buffer = ob_get_contents();
ob_end_clean();
return $buffer;
}
これでOKと思ったが、show_404からもshow_errorは呼ばれて、そのときに下記エラー。 PHP Fatal error: Class 'CI_Controller' not found
呼ばれる順番によってはclassがみつからなくてエラーになるみたい。get_instanceやめて下記のようにしたらshow_404でも問題ない。
require_once BASEPATH.'core/Controller.php';
$CI = new CI_Controller();
CodeIgniter ユーザガイドを見ても、get_instanceを使うよう書いてあるので、この方法はきっといけていないはず。