2012年6月17日日曜日

[CodeIgniter]エラーページのカスタマイズのメモ

CodeIgniterでエラーページはシンプルでheadingとmessageしか表示されないのでカスタマイズする。
まず、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を使うよう書いてあるので、この方法はきっといけていないはず。