簡體   English   中英

Codeigniter AUtoload和蓬勃發展的自動加載功能之間的沖突

[英]Conflict between Codeigniter AUtoload and Flourish Autoload functions

我正在使用Codeigniter( http://codeigniter.com/ )框架以及Flourish庫( unframework )( http://flourishlib.com/ )開發一個Web應用程序。

我只是簡單地將興旺文件夾放到應用程序中,然后按照指示創建了興旺的初始化和配置文件(這些創建了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中,索引文件之前帶有:

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

現在,各自的自動加載功能(因為每個都有其自身的功能)正在發生沖突。 僅當我注釋掉任一框架的自動加載功能(及其依賴項)時,該應用程序才能工作。

請問我如何合並自動加載功能,以便我可以同時訪問CI和繁榮?

還是有更好的方法在一個應用程序中同時使用兩個系統? 請說。

謝謝。

我是《蓬勃發展》的作者。 我在“入門”頁面上提供的自動裝帶器示例僅用於幫助人們(如果他們還沒有環境)起床和入門。

在您的情況下,因為您有多個庫,所以我建議使用spl_autoload_register() 您可以注冊CI自動裝帶器,然后注冊蓬勃發展的裝帶器。

創建一個自定義__autoload函數。 將CI原件重命名為__autoload_ci和蓬勃的__autoload_flourish。

添加return true;很重要return true; 當兩個原始的自動加載器都成功時。 刪除所有錯誤/異常。 然后部署一個自定義包裝器:

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

或使用spl_autoload_register

感謝http://codeigniter.com/forums/viewthread/73804/#366081以及我在Twitter上關注的一些CI人士提供的信息(我問他們): Eric BarnesDan HorriganPhil SturgeonZack 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');

表現出色。 謝謝大家!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM