подключаем сторонние библиотеки к 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 {
 
<p class="wp-caption"><script type="text/javascript"><!--
google_ad_client = "ca-pub-1195314499431105";
/* simplecoding content */
google_ad_slot = "2021931265";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</p>
 
    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.

Но оба этих недостатка перекрываются главным достоинством – отсутствием необходимости изменять стороннюю библиотеку.

А что вы думаете об этой библиотеке?
Теги:
сторонние библиотеки
Добавлено: 20 Апреля 2018 08:14:17 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...