Codeigniter 3 自动加载控制器

Codeigniter 3 autoload controller

我在 codeigniter 中使用 REST Server,使用方法是在我所有控制器的应用程序中,我必须在开始时写下这一行:

require APPPATH . '/libraries/REST_Controller.php';

有谁知道如何自动加载此 REST_Controller 并避免在我的所有控制器中使用此行?我不想使用 require.

提前致谢

您可以通过 Codeigniter 的自动加载配置来实现。

编辑位于目录 YourProject/application/config/ 中的项目 autoload.php

$autoload['libraries'] = array('REST_Controller');

并在控制器中通过 $this->rest_controller.

访问此库 class

顺便说一句:Rest_Controllers 是一个库文件,所以我认为以 Controller 为后缀的名称不是一个好的名称。

编辑

通过您的评论,我了解到您实际上是指从 REST_Controller 扩展而来的所有控制器,并且您不希望在每个控制器文件的顶部都要求它。

解决方案:

  1. REST_Controller.php 移动到目录 YourProject/application/core/
  2. YourProject/application/config/config.php 行 119 中将 $config['subclass_prefix'] = 'MY_'; 更改为 $config['subclass_prefix'] = 'REST_';

然后 Codeigniter 将自动加载 REST_Controller

但是 subclass_prefix 配置具有全局效果,您需要更改 REST_Conttoller.php 的位置,所以要进行最小的更改,我认为最好的方法是创建 MY_Controller class 在目录 ./application/core/ 中,并在这个新文件的底部要求 REST_Controller。当 CI 自动加载 MY_controllerREST_Controller 也将是必需的。

注意: MY_Controller需要从CI_Controller

扩展

将文件包含在 MY_Controller class 的构造函数中,然后将其扩展到需要使用 REST_Controller 的任何控制器。 如果您在 APPPATH.'core/' 位置没有 MY_Controller.php 文件,请制作一个并按此处所示使用它:

<?php defined('BASEPATH') OR exit('See you next time.');

//APPPATH.'core/' location
class MY_Controller extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();

        require APPPATH . 'libraries/REST_Controller.php';//this constant ends with slash already
    }
}

现在,在每个你想使用的控制器中 REST_Controller 都有这样的代码:

<?php defined('BASEPATH') OR exit('See you next time.');

//example controller
class Api extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    //bare example method
    public function some_get()
    {
        echo '<pre>', var_dump('Some REST_Controller code logic here'), '</pre>';
    }
}