【问题标题】:CodeIgniter extending controller using composer not workingCodeIgniter 使用 Composer 扩展控制器不起作用
【发布时间】:2017-09-19 11:24:51
【问题描述】:

我正在尝试使用 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"
      ]
    }, 

【问题讨论】:

  • 路径好吗? FCPATHci-dev,并且您将进入带有 $config['composer_autoload'] = FCPATH.'../vendor/autoload.php'; 的目录
  • 我将public_html 中的index.php 文件移动到ci-dev 文件夹中,并将我的作曲家vendor 文件夹移动到ci-dev 文件夹中
  • CI_Controller not found 表示找到了其他类。保留相同的配置,但使用 CI_Controller 扩展 Welcome 类,看看会发生什么。

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


【解决方案1】:

CodeIgniter 会在您的 vendor/autoload.php 文件之后加载CI_Controller ,并且由于您将它们列在 composer.json 的“文件”选项下,因此它们被包含在 立即 而不是在您需要时立即使用。

这不仅是导致错误的原因,而且还超出了使用自动加载器的全部目的 - 如果您要明确列出包含的内容,您不妨只是 require_once 它们。

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

但如果你坚持通过 Composer 加载它们,有一个变通办法 - 在自动加载的文件下也列出 system/core/Controller.php。

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多