Codeigniter AUtoload 和 Flourish Autoload 函数之间的冲突

发布于 2024-09-25 14:00:12 字数 1194 浏览 4 评论 0原文

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

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

这是我的文件夹结构:

---auxcode\
--------init.php
--------config.php
--------蓬勃发展\
---系统\
---应用程序\
---public_html\

初始化文件仅包含配置文件,配置文件内容如下所示:

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 中,索引文件已添加以下内容:

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

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

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

谢谢。

I am developing a web application, using the Codeigniter ( http://codeigniter.com/ ) framework plus the Flourish library (unframework) ( http://flourishlib.com/ ).

I simply dropped the flourish folder into my application, then I created a flourish initialization and config files as instructed (these create the Flourish autoload).

This is my folder structure:

---auxcode\
--------init.php
--------config.php
--------flourish\
---system\
---application\
---public_html\

The init file ONLY includes the config file, and the config file contents shown below:

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');

}

In public_html, the index file has been prepended with this:

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

Now, the respective autoload functions (as each has its own) are conflicting. The application only works when I comment out the autoload functions (and their dependents) of either framework.

Please how can I merge the autoload functions such that I can access both CI and flourish the same way?

Or if there is a better method to use both systems in one application? Pray, tell.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

寄居人 2024-10-02 14:00:12

我是《绽放》的作者。我在入门页面上提供的示例自动加载器只是为了帮助人们在还没有环境的情况下入门。

在您的情况下,由于您有多个库,我建议使用 spl_autoload_register( )。您可以注册 CI 自动加载器,然后注册您的 Flourish 自动加载器。

I'm the author of Flourish. The example autoloader I provide on the getting started page is just supposed to help people get up and started if they don't have an environment already.

In your case since you have multiple libraries, I would recommend using spl_autoload_register(). You can register the CI autoloader and then register your Flourish one.

云雾 2024-10-02 14:00:12

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

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

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

或使用 spl_autoload_register

Create a custom __autoload function. Rename the CI original into __autoload_ci and the Flourish __autoload_flourish.

It's important to add a return true; to both original autoloaders, when they were successful. Remove any errors/exceptions.
Then deploy a custom wrapper:

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

Or use spl_autoload_register

夜访吸血鬼 2024-10-02 14:00:12

感谢 http://codeigniter.com/forums/viewthread/73804/#366081以及我在 Twitter 上关注的一些 CI 人员提供的一些信息(我问他们):Eric Barnes丹·霍里根菲尔·斯特金< /a> 和 Zack Kitzmiller,我找到了解决方案。如果您是像我一样的 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');

工作出色。谢谢大家!

Thanks to http://codeigniter.com/forums/viewthread/73804/#366081 and some bits of information from some CI folk that I follow on twitter (I asked em): Eric Barnes, Dan Horrigan, Phil Sturgeon and Zack Kitzmiller, I found a solution. If you are a CodeIgniter n00b like me, you may like to follow these guys.

I deleted init.php and config.php, then jammed the following into the bottom of my CI's config.php (I am also autoloading from a custom library called 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');

Works brilliantly. Thanks, people!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文