2013-02-04 84 views
0

我试图在我的模型和控制器中使用异常。在application目录中,我创建了一个目录Exceptions,它在文件'CustomException1.php'和'CustomException2.php'中有一些异常类。在控制器中包含自定义异常文件

application/core

class MY_Controller extends CI_Controller { 

    public function __construct() { 
     parent::__construct();  

     // include Exception files 
     require_once(APPPATH . 'Exceptions/CustomException1.php'); 
     require_once(APPPATH . 'Exceptions/CustomException2.php'); 
    } 

} 

定义MY_Controller在我的控制器Test

class Test extends MY_Controller { 
    public function index() { 
     try { 
     throw new CustomException1('This is a custom exception'); 
     } catch (CustomException1 $e) { 
     $this->output->set_status_header('500'); 
     echo $e->message; 
     } 
} 

现在,我希望这个工作,因为我要求所有定义异常类的文件,但我仍然得到一个错误说明

Class CustomException1 not found on line xx

回答

0
throw new CustomException1('This is a custom exception'); 

和 赶上(CustomException $ E)

TBH,这更看起来像一个错字。抛出的异常CustomException1应该是CustomException

+0

啊,这将是我发布问题时发生的错误。我重命名了我抛给'CustomException'的实际异常。我现在会解决这个问题,但是谢谢你指出。 – xbonez

0

无论出于何种原因,包括来自Exceptions目录的文件在CI中都不起作用。将它们放入libraries目录并使用$this->load->library()加载它们也不会起作用,因为CI在加载时尝试实例化这些库,这当然不是我想要的。

我最终把它们放在内的helpers之内,并使用$this->load->helper('Exceptions/CustomException');加载它们在MY_Controller

需要注意的是在一个辅助装载时,CI转换为小写的整个路径并追加_helper到文件名末尾,所以我的异常类的服务器上的确切路径是

APPPATH . 'helpers/exceptions/customexception_helper.php'是非常重要的

这是我修改的基类控制器:

class MY_Controller extends CI_Controller { 

    public function __construct() { 
     parent::__construct();  

     $this->load->helper("Exceptions/CustomException1.php"); 
     // includes file APPPATH . 'helpers/exceptions/customexception1_helper.php' 

     $this->load->helper("Exceptions/CustomException2.php"); 
     // includes file APPPATH . 'helpers/exceptions/customexception2_helper.php' 
    } 
} 

一旦使用包括本MY_Controller方式,这些异常然后可以在车型上也没有需要重新加载它们在MY_Model

PS - 我对这个解决方案并不完全满意,而且看起来有点像黑客一样,但这可能是将异常集成到CodeIgniter中的唯一方法。

相关问题