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
扩展而来的所有控制器,并且您不希望在每个控制器文件的顶部都要求它。
解决方案:
- 将
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
class 在目录 ./application/core/
中,并在这个新文件的底部要求 REST_Controller
。当 CI
自动加载 MY_controller
时 REST_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>';
}
}
我在 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
.
顺便说一句: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
class 在目录 ./application/core/
中,并在这个新文件的底部要求 REST_Controller
。当 CI
自动加载 MY_controller
时 REST_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>';
}
}