CodeIgniter不会自动加载我的核心扩展


CodeIgniter does not autoload my core extension

由于我对命令show_404()非常满意,您可以在任何地方调用该命令来显示404错误页面,因此我确实想为没有权限的请求实现show_403()

我创建了文件application/core/MY_Exceptions.php,并添加了以下代码:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Exceptions extends CI_Exceptions {
    public function __construct()
    {
        parent::__construct();
    }
    public function show_403($page = '', $log_error = TRUE)
    {
        //do some stuff
        echo "test";
    }
}

然后我会在控制器application/controllers/Welcome.php中这样称呼它:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller {
    public function index()
    {
        // show_404();  // <-- this works!
        show_403();     // <-- this works not!
    }
}

当我访问控制器索引方法时,我在浏览器中不断收到以下错误:

Fatal error: Call to undefined function show_403()

正如你可能已经注意到的,我甚至在CodeIgniter的普通安装上测试了这个错误,所以你应该能够用这两个文件来重现这个错误。

我知道我可以手动加载扩展,但这并不像我想在任何地方使用show_403()那样优雅。。。

路由设置正确,CodeIgniter版本为3.0.3,PHP版本为5.6.2,出于调试目的,application/core/MY_Exceptions.php的文件系统权限甚至设置为777。

您的异常类没有加载,因此会出现错误。

像这个一样加载你的课程

 $excep = load_class('Exceptions', 'core', $this->config->item('subclass_prefix'));
  echo $excep->show_403();// will echo test

另一个建议是使用helpers

application/helpers中添加文件名为error_helper 的代码

public function show_403($page = '', $log_error = TRUE)
{
    //do some stuff
    echo "test";
}

调用您的函数

$this->load->helper('error_helper');
echo show_403();