我正在尝试在我的模型和控制器中使用异常。在application
目录中,我创建了一个目录Exceptions
,在文件'CustomException1.php'和'CustomException2.php'中有一些异常类。
我在MY_Controller
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');
}
}
在我的控制器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;
}
}
现在,我希望这可以工作,因为我需要所有定义Exception类的文件,但我仍然会收到错误说明
Class CustomException1 not found on line xx
答案 0 :(得分:0)
throw new CustomException1('This is a custom exception');
和 catch(CustomException $ e)
tbh,这更像是一个错字。抛出的异常CustomException1
应为CustomException
答案 1 :(得分:0)
无论出于何种原因,包括Exceptions目录中的文件在CI中都不起作用。将它们放在libraries
目录中并使用$this->load->library()
加载它们也不会有效,因为CI在加载时尝试实例化库,当然,这是我不想要的。
我最终将它们放在exceptions
中的helpers
目录中,然后使用MY_Controller
将其加载到$this->load->helper('Exceptions/CustomException');
。
重要的是要注意,在帮助程序中加载时,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中的唯一方法。