Конфликт между функциями Codeigniter AUtoload и Flourish Autoload

Я разрабатываю веб-приложение, используя инфраструктуру Codeigniter ( http://codeigniter.com/ ) плюс библиотеку Flourish (без рамки ) ( http://flourishlib.com/ ).

Я просто сбросил папку процветания в свое приложение, а затем создал оптимизированные файлы инициализации и конфигурации в соответствии с инструкциями (они создают автозагрузку 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 и процветать одинаково?

Или, если есть лучший способ использовать обе системы в одном приложении? Скажите на милость.

Благодарю.

Я автор Flourish. Пример автозагрузчика, который я предоставляю на странице начала работы, просто должен помочь людям встать и начать, если у них уже нет среды.

В вашем случае, поскольку у вас есть несколько библиотек, я бы рекомендовал использовать spl_autoload_register () . Вы можете зарегистрировать автозагрузчик CI, а затем зарегистрировать свой Flourish.

Создайте пользовательскую функцию __autoload. Переименуйте оригинал CI в __autoload_ci и Flourish __autoload_flourish.

Важно добавить return true; для обоих оригинальных автозагрузчиков, когда они были успешными. Удалите все ошибки / исключения. Затем разверните пользовательскую оболочку:

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

Или используйте spl_autoload_register

Благодаря http://codeigniter.com/forums/viewthread/73804/#366081 и некоторым фрагментам информации от некоторых людей CI, которые я следую на Twitter (я спросил их): Эрик Барнс , Дэн Хорриган , Фил Стерджон и Зак Кицмиллер , Я нашел решение. Если вы CodeIgniter n00b, как я, вам может понравиться следовать за этими парнями.

Я удалил init.php и config.php, затем застрял в нижней части моего config.php моего CI (я также автоматически загружаюсь из пользовательской библиотеки 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');

Работает блестяще. Спасибо, люди!