我已经阅读了有关此问题的所有帖子,但没有任何效果。我在使用Apache2.2和PHP5.3.2的LAMP中使用Codeigniter 2.02
我正在尝试创建一个公共控制器,我的公共控制器将从该控制器继承,因此我可以在那里执行常见任务。
我有这个:
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Parent_controller extends CI_Controller {
public function Parent_controller()
{
parent::__construct();
}
public function index() {
echo "Hi!";
}
}
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends Parent_controller {
public function __construct()
{
parent::__construct();
}
}
我已经尝试了我发现的下一个解决方案,但它们都没有工作:
公共函数__contstruct()而不是公共函数Parent_controller()
父:: Parent_controller();
将parent_controller.php文件放入核心
将parent_controller.php文件放入控制器
将此添加到config / config.php:
function __autoload($class){
if (file_exists(APPPATH."(controllers|core)/".$class.EXT)){
require_once(APPPATH.'(controllers|core)/'.$class.EXT);
}
}
谢谢大家。
答案 0 :(得分:3)
看看Phil Sturgeon的这篇文章:
http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY
关键是使用原生自动加载,如帖子中所述:
/*
| -------------------------------------------------------------------
| Native Auto-load
| -------------------------------------------------------------------
|
| Nothing to do with cnfig/autoload.php, this allows PHP autoload to work
| for base controllers and some third-party libraries.
|
*/
function __autoload($class)
{
if(strpos($class, 'CI_') !== 0)
{
@include_once( APPPATH . 'core/'. $class . EXT );
}
}
注意强>
作为备注,您需要将所有“基础”控制器放在CI2 +的core
文件夹中
答案 1 :(得分:1)
这个位是正确的
public function __contstruct()而不是public function Parent_controller()
但你要找的是MY_前缀。因此,如果您在/ application / libraries /文件夹中创建控制器并调用文件MY_Controller.php和类MY_Controller,它将起作用。
您还可以在config.php文件中将MY_前缀更改为您想要的任何内容。寻找:
/*
|--------------------------------------------------------------------------
| Class Extension Prefix
|--------------------------------------------------------------------------
|
| This item allows you to set the filename/classname prefix when extending
| native libraries. For more information please see the user guide:
|
| http://codeigniter.com/user_guide/general/core_classes.html
| http://codeigniter.com/user_guide/general/creating_libraries.html
|
*/
$config['subclass_prefix'] = 'MY_';
如需进一步阅读,请参阅http://codeigniter.com/user_guide/general/core_classes.html
答案 2 :(得分:0)
还请注意,它不会加载大量文件。它只是寻找1个名为MY_Controller.php的控制器。
如果您认为它将加载MY_Test_Controller.php和MY_Web_Controller.php,则不会。
如果您可以在一个文件中包含多个控制器,或在该文件中包含其他文件。
您当然可以解决此问题,但是需要了解很多其他信息。