简体   繁体   中英

CodeIgniter create new custom exception

I'm trying to create a custom exception to return a correct message based on $_FILES[..]['error'] codes.

I have extended the CI_Exceptions class :

class MY_Exceptions extends CI_Exceptions {
    function My_Exceptions() {
        parent::CI_Exceptions();
    }

    public function file_upload_error($error_code = UPLOAD_ERR_OK) {
        switch ($error_code) {
            case UPLOAD_ERR_INI_SIZE:
                $message = "The uploaded file exceeds the upload_max_filesize directive in php.ini";
                break;
            case UPLOAD_ERR_FORM_SIZE:
                $message = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form";
                break;
            case UPLOAD_ERR_PARTIAL:
                $message = "The uploaded file was only partially uploaded";
                break;
            case UPLOAD_ERR_NO_FILE:
                $message = "No file was uploaded";
                break;
            case UPLOAD_ERR_NO_TMP_DIR:
                $message = "Missing a temporary folder";
                break;
            case UPLOAD_ERR_CANT_WRITE:
                $message = "Failed to write file to disk";
                break;
            case UPLOAD_ERR_EXTENSION:
                $message = "File upload stopped by extension";
                break;

            default:
                $message = "Unknown upload error";
                break;
        }

        log_message('error', $error_code);
        return $message;
    }    
}

But when I call file_upload_error(1) it says Call to undefined function file_upload_error()

How do I approach this problem?

I get the feeling that you're not using your library class correctly, but it's hard to tell from your question. From a model or controller class, you would use:

$this->load->library('exceptions');
$message = $this->exceptions->file_upload_error($error_code);

when you tell it to load the exceptions library, it automatically looks to see if there's one in your application/libraries/ directory with the MY_ prefix. If it's there, it will load it. Then you access it as with any other library.

Hope that helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM