Inferno: подключаем сторонние библиотеки к CodeIgniter

Использовать библиотеки сторонних разработчиков вместе с фреймворком CodeIgniter в большинстве случаев не сложно. Достаточно, чтобы библиотека соответствовала небольшому перечню требований.
Для большинства библиотек это означает, что нужно править их исходных код. Изменений обычно не много, но они есть. И если вы решите обновить библиотеку, то их придется делать заново.
Избавиться от этой проблемы можно с помощью библиотеки Inferno. Ее предназначение – подключение сторонних библиотек к фреймворку.
Кстати, в дистрибутив уже включены три библиотеки: TarzanAws - Amazon Web Services, Akismet API и Simplepie RSS Parsing.
Подробной инструкции по подключению библиотек я, к сожалению, не нашел. Но оказалось, что, глядя на готовые примеры, задачу можно решить минут за двадцать.
В качестве «подопытного кролика» я использовал PclZip.
Примечание. CodeIgniter имеет собственную библиотеку для работы с архивами. Но возможности PclZip шире, да и интересовал меня больше сам процесс подключения.
Предварительная подготовка.
Качаем PclZip и распаковываем архив в папку с Inferno.
У меня получилась такая структура папок:
application/ libraries/ inferno/ third_party/ pclzip-2-6/ pclzip.lib.php
Создаем файл inferno_pclzip.php и сохраняем его в application/libraries/inferno/.
Название файла может быть любым, но обязательно должно содержать приставку «inferno_».
Этот файл будет содержать класс, выполняющий загрузку библиотеки и вызов ее методов.
Рассмотрим его подробнее.
-
<?php
-
/**
-
* Inferno_PclZip
-
* PclZip Inferno Wrapper
-
*
-
* @category Inferno
-
* @package Inferno_PclZip
-
* @version 2008.08.19
-
* @copyright 2008 Statsenko Vladimir.
-
* @license http://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0 License
-
* @link http://www.haughin.com/code/inferno/ Inferno
-
* @link http://www.simplecoding.org/ SimpleCoding
-
*/
-
-
class Inferno_PclZip extends Inferno {
-
-
function Inferno_PclZip($archive)
-
{
-
include (INFERNO_PATH.'third_party/pclzip-2-6/pclzip.lib.php');
-
-
$this->pclzip = new PclZip($archive);
-
}
-
-
function __call($method, $arguments)
-
{
-
return call_user_func_array(array($this->pclzip, $method), $arguments);
-
}
-
}
-
?>
Имя класса должно совпадать с именем файла и начинаться с заглавной буквы. Кроме того, этот класс должен быть потомком класса Inferno.
В конструкторе мы подключаем библиотеку (с помощью функции include). Тут удобно использовать константу INFERNO_PATH, которая указывает на папку с библиотекой.
После этого создаем объект PclZip. Имя архива мы передаем в первом параметре конструктора (это требование библиотеки PclZip).
Полученный объект присваиваем переменной $this->pclzip.
Примечание. Действия, которые нужно выполнить в конструкторе, зависят от конкретной библиотеки. Возможно, вам придется определить константы, подключить дополнительные файлы и т.п.
Метод __call позволяет вызывать методы объекта PclZip, т.е. дает возможность работать с библиотекой.
Использование библиотеки.
Подключение библиотеки выполняется в два этапа. Сначала нужно подключить Inferno, а затем, саму библиотеку.
Например:
-
$this->load->library('inferno');
-
$this->inferno->load('pclzip', 'e:\\myarch.zip');
Как видите, для подключения сторонней библиотеки используется функция load. В первом ее параметре передаем название библиотеки (pclzip), во втором – параметр конструктора (имя файла с архивом).
После этого, можно обращаться к любым функциям библиотеки.
Например, добавим файл в архив.
-
$res = $this->inferno->pclzip->add('E:\\rssevets.sql', PCLZIP_OPT_REMOVE_ALL_PATH);
-
if ($res == 0) {
-
echo $this->inferno->pclzip->errorCode().'<br />';
-
echo $this->inferno->pclzip->errorName().'<br />';
-
echo $this->inferno->pclzip->errorInfo().'<br />';
-
}
Как видите, доступ к библиотеке мы получаем через объект $this->inferno.
В общем, библиотека интересная и полезная. Недостатков, на мой взгляд, только два.
1) Удлиняется цепочка вызовов из-за использования дополнительного объекта (inferno).
2) Возможно небольшое снижение быстродействия из-за использования метода __call.
Но оба этих недостатка перекрываются главным достоинством – отсутствием необходимости изменять стороннюю библиотеку.
А что вы думаете об этой библиотеке?
Понравилась статья? Подпишитесь на продолжение
!
Опубликовано в CodeIgniter, PHP, Web разработка
Комментарии (14)
Вы можете отслеживать обсуждение записи с помощью RSS 2.0 ![]()
Вы также можете оставить комментарий, или трекбек с Вашего сайта.
Оставить комментарий







Автор, рассмотри пожалуйста вопрос о том, как создать на пхп прогу, удаленно постящую на вордпресс при выключенном XML-RPC. или при включенном даж. очень жду такой заметки. и вообще статей которые посвящены программингу для сеошнегов….))
Интересно предложение.
Вообще-то раньше была идея написать о работе с XML-RPC. Да и библиотек готовых много.
Без XML-RPC работать с WP намного сложнее. Т.е. придется имитировать работу пользователя с помощью cURL.
Да, намутили с этими библиотеками в CodeIgniter. Почему бы просто не использовать require_once перед работой с библиотекой?
В принципе, я их понимаю. Получилась общая система загрузки расширений.
И доступ к ним всегда одинаковый
($this->library->method(…))
независимо от того, как была загружена библиотека - с помощью $this->load->…. или с помощью autoload.php.
А в общем-то ничто не мешает использовать include и require.
Кстати, библиотеки загруженные стандартным методом будут автоматически доступны в моделях.
Ну да, получется, что при $this-load новый объект подсоединяется к глобальному $this. Получается вроде как единый объект.
Я, кстати, от 1.6.2 отказался именно из-за того, что при таком подключении в XMLRPC исчезала bd. Так и не поборол. В 1.6.3 не проверял.
Точнее глобальному $CI.
Честно говоря, 1.6.2 я даже не качал
Хм, интересно. Получается — подключение сторонних библиотек с помощью в принципе такой же сторонней (не входящей в дистрибутив CI) библиотеки.
Ну да. По большому счету Inferno просто позволяет обойти соглашения об именах.
Владимир, ждем-с) Если что, у меня смежных вопросов тож много)))
Хотел в свое время реализовать подобное - усидчивости не хватило
Не я от всего этого очень далёк,я привык старыми методами работать!
Методы практически одинаковые. Просто фреймворк может существенно облегчить жизнь, но за это придется чем-то платить (как минимум временем на изучение
).
Угу, а в моем случае это изучение помогает. Приходится изучать не только фреймворк, но и php