我在codeigniter中使用REST Server,使用方法是在我的应用程序中所有控制器中我必须在开始时写这行:
require APPPATH . '/libraries/REST_Controller.php';
有谁知道如何自动加载这个REST_Controller并避免在我的所有控制器中使用这一行?我不想使用require。
提前感谢
答案 0 :(得分:5)
您可以通过Codeigniter
的自动加载配置来实现此目的。
修改位于目录autoload.php
YourProject/application/config/
$autoload['libraries'] = array('REST_Controller');
在控制器中通过$this->rest_controller
访问此库类。
BTW:Rest_Controllers是一个库文件,因此我不认为带有Controller
后缀的名称是一个很好的名称。
<强> 修改 强>
通过您的评论,我知道您实际上是指从REST_Controller
扩展的所有控制器,并且您不希望在每个控制器文件的顶部都需要它。
解决方案:
REST_Controller.php
移至目录YourProject/application/core/
。YourProject/application/config/config.php
第119行中,将$config['subclass_prefix'] = 'MY_';
更改为$config['subclass_prefix'] = 'REST_';
然后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>';
}
}