CodeIgniter扩展控制器使用composer无法正常工作

时间:2017-04-22 13:44:18

标签: php codeigniter optimization composer-php spl-autoload-register

我正在尝试使用composer在我的应用程序中扩展CodeIgniter控制器,但它无法正常工作。

这给了我

Fatal error: Class 'CI_Controller' not found in D:\xampp\htdocs\ci-dev\application\core\MY_Controller.php on line 11

我知道如果我在config.php中添加spl_autoload_register然后它就可以了,但我想使用作曲家。

这是我的全部设置。

我在 application / core / MY_Controller.php中创建了MY_Controller

class MY_Controller extends CI_Controller
{
    public $data = array();

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

之后我在 application / libraries / Admin_Controller.php中添加管理控制器

class Admin_Controller extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
}

application / libraries / Frontend_Controller.php中的前端控制器

class Frontend_Controller extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
}

这是我的默认控制器索引调用

class Welcome extends Frontend_Controller {

    public function index()
    {
        $this->load->view('welcome_message');
    }
}

我在config.php中设置了这样的作曲家

$config['composer_autoload'] = FCPATH.'../vendor/autoload.php';

和composer.json这样的文件

"autoload": {
      "files" : [
        "application/core/MY_Controller.php",
        "application/libraries/Admin_Controller.php",
        "application/libraries/Frontend_Controller.php"
      ]
    }, 

1 个答案:

答案 0 :(得分:0)

CodeIgniter在您的vendor / autoload.php文件之后加载CI_Controller ,并且因为您在composer.json的“files”选项下列出它们,所以它们包括在内< em>立即而不是在你需要的时候。

这不仅是导致错误的原因,而且还击败了使用自动加载器的整个目的 - 如果您明确列出包含,您可能只是require_once

CI中常见的是,require甚至直接从MY_Controller.php内部声明多个基本控制器类 - 然后您就知道它们将在您需要时准确提供。

但如果你坚持通过Composer加载它们,那么在自动加载文件下也有一个解决方法 - 系统/ core / Controller.php。