Я разрабатываю веб-приложение, используя инфраструктуру 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');
Работает блестяще. Спасибо, люди!