Codeigniter AUtoload和Flourish Autoload功能之间的冲突

时间:2010-09-29 15:37:35

标签: php codeigniter autoload

我正在开发一个Web应用程序,使用Codeigniter(http://codeigniter.com/)框架和Flourish库( unframework )(http://flourishlib.com/)。

我只是将蓬勃发展的文件夹放入我的应用程序中,然后按照指示创建了蓬勃发展的初始化和配置文件(这些创建了蓬勃发展的自动加载)。

这是我的文件夹结构:

--- auxcode \
--------的init.php
-------- config.php文件
--------蓬勃发展\
--- SYSTEM \
---应用程序\
---的public_html \

init文件仅包含配置文件,以及如下所示的配置文件内容:

function __autoload($class_name){

{
    // Customize this to your root Flourish directory
    $flourish_root = $_SERVER['DOCUMENT_ROOT'] . '/../auxcode/flourish/';

$file = $flourish_root . $class_name . '.php';

if (file_exists($file)) {
    include $file;
    return;
}

throw new Exception('The class ' . $class_name . ' could not be loaded');

}

在public_html中,索引文件前缀为:

<?php include_once($_SERVER['DOCUMENT_ROOT'] . '/../inc/init.php');

现在,相应的自动加载功能(每个都有自己的功能)是冲突的。该应用程序仅在我注释掉任一框架的自动加载功能(及其依赖项)时才有效。

请问如何合并自动加载功能,以便我可以同样访问CI和蓬勃发展?

或者,如果有更好的方法在一个应用程序中使用这两个系统?祈祷,告诉。

感谢。

3 个答案:

答案 0 :(得分:4)

我是Flourish的作者。我在入门页面上提供的示例自动加载器应该可以帮助人们在没有环境的情况下启动并启动。

在您的情况下,因为您有多个库,我建议您使用spl_autoload_register()。您可以注册CI自动装载机,然后注册您的蓬勃发展。

答案 1 :(得分:2)

创建自定义__autoload函数。将CI原件重命名为__autoload_ci和Flourish __autoload_flourish。

在两个原始自动加载器成功时,向其添加return true;非常重要。删除所有错误/异常。 然后部署自定义包装器:

 function __autoload($class) {
     __autoload_ci($class) || __autoload_flourish($class);
 }

或使用spl_autoload_register

答案 2 :(得分:1)

感谢http://codeigniter.com/forums/viewthread/73804/#366081以及我在Twitter上关注的一些CI人员的一些信息(我问他们):Eric BarnesDan HorriganPhil Sturgeon和{{ 3}},我找到了解决方案。如果你是像我这样的CodeIgniter n00b,你可能想跟随这些家伙。

我删除了init.php和config.php,然后将以下内容卡入CI的config.php底部(我也是从名为mylibrary的自定义库中自动加载)。

function multi_auto_require($class) {
if(stripos($class, 'CI') === FALSE && stripos($class, 'PEAR') === FALSE) {
    foreach (array('flourish', 'mylibrary') as $folder){
        if (is_file(APPPATH."../auxengines/{$folder}/{$class}.php")){
            include_once APPPATH."../auxengines/{$folder}/{$class}.php";
        }
    }
}
}
  

spl_autoload_register( 'multi_auto_require');

工作出色。谢谢,人们!