我正在尝试使用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"
]
},
答案 0 :(得分:0)
CodeIgniter在您的vendor / autoload.php文件之后加载CI_Controller
,并且因为您在composer.json的“files”选项下列出它们,所以它们包括在内< em>立即而不是在你需要的时候。
这不仅是导致错误的原因,而且还击败了使用自动加载器的整个目的 - 如果您明确列出包含,您可能只是require_once
。
CI中常见的是,require
甚至直接从MY_Controller.php内部声明多个基本控制器类 - 然后您就知道它们将在您需要时准确提供。
但如果你坚持通过Composer加载它们,那么在自动加载文件下也有一个解决方法 - 系统/ core / Controller.php。