Codeigniter 3自动加载控制器

时间:2016-08-10 07:09:00

标签: php codeigniter autoload codeigniter-restserver

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

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

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

提前感谢

2 个答案:

答案 0 :(得分:5)

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

修改位于目录autoload.php

中的项目YourProject/application/config/
$autoload['libraries'] = array('REST_Controller');

在控制器中通过$this->rest_controller访问此库类。

BTW: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_';
  3. 然后Codeigniter将自动加载REST_Controller

    subclass_prefix配置具有全局效果,您需要更改REST_Conttoller.php的位置,以便进行最小的更改我认为最好的方法是在目录中创建MY_Controller./application/core/并在此新文件底部需要REST_Controller。 <{1}}自动加载CI MY_controller也是必需的。

    注意: REST_Controller需要从MY_Controller延伸

答案 1 :(得分:2)

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

<?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>';
    }
}