0

PHP codeigniter ベースの Web アプリケーションを実行しています。アプリケーションでカスタム エラー ページとカスタム エラー メッセージを表示したいと考えていました。

そこで、カスタム例外クラスで codeigniter のコア Exception クラスを拡張しました。application/core フォルダーにファイル MY_Exceptions.php を追加しました。

show_errorメソッドは上書きされているようですがshow_php_error、カスタム クラスによって上書きされていません。application/core/MY_Exceptions.php (私のカスタム クラス) ではなく、system/core/Exceptions.php からまだ show_php_error メソッドを実行しています。

MY_Exceptions.php ファイルは以下のとおりです -

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class MY_Exceptions extends CI_Exceptions
{
public function __construct()
{
    parent::__construct();
}

function show_error($heading, $message, $template = 'error_general', $status_code = 500)
{
    if($template!='error_404'){
        $template = 'custom_error_page';
        $heading = "An Error Occured";
        $message = "We're sorry, but we can not complete the action you requested. A notification has been sent to our customer service team. Please try again later.";
    }else{
        $template = 'custom_error_page';
        $heading = "404 Page Not Found";
        $message = "We're sorry, but we can not load the page you requested. A notification has been sent to our customer service team. Please try again later..";
    }
    set_status_header($status_code);

    $message = '<p>'.implode('</p><p>', ( ! is_array($message)) ? array($message) : $message).'</p>';

    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;
}

function show_php_error($severity, $message, $filepath, $line)
{
    $heading = "An Error Occured";
    $message = " We're sorry, but we can not complete the action you requested. A notification has been sent to our customer service team. Please try again later.";
    echo $this->show_error($heading, $message, 'custom_error_php', 404);
    exit;
}

}

4

1 に答える 1

1

Why dont you just changed the "error_404.php" and "error_general.php" files in /application/errors?

That way you can style the pages however you want, and put your generic error messages there, rather than extending a core class?

于 2012-05-24T13:51:22.363 に答える