====== Введение в пакеты Limb3 ====== [[limb3:ru:packages|Список пакетов Limb3]] Limb3 - это фреймворк, разделенный на пакеты. Что считается пакетом? Пакет - это, по сути, некоторый узкоспециализированный функционал, расположенный в директории с определенной структурой(см. ниже). Например, есть базовый пакет [[limb3:ru:packages:core|CORE]], пакет шаблонной системы [[limb3:ru:packages:macro|MACRO]], пакет для отображения объектов в реляционную БД [[limb3:ru:packages:active_record|ACTIVE_RECORD]], пакет интернационализации I18N, пакет для работы с деревьями в базе данных TREE и т.д. Приложение, построенное при помощи Limb3, таким образом, использует те или иные пакеты и, к тому же, иногда само является пакетом. ===== Стандартная файловая структура пакета. ===== ^Папка^Описание^ |build/|Различные build скрипты| |cli/|CLI утилитарные скрипты | |examples/|Примеры использования| |lib/|Внешние библиотеки, от которых зависит пакет | |init/|Инициализационные данные, к примеру, sql файлы для заполнения базы данных| |settings/|Файлы настройки, со значениями по умолчанию| |shared/|Файлы, которые используются во многих проектах, но не являющиемся php-файлами. Обычно здесь хранятся javascript-ы, изображения, css-файлы.| |src/|Исходный код пакета: классы, модули и проч.| |template/|Файлы шаблонов| |tests/|Модульные тесты пакета| |www/|Директория доступная для web сервера, если пакет является web приложением| |common.inc.php|Файл инициализации пакета| ===== Пример подключения файлов из пакетов Limb3 ===== - Добавлении директории, содержащая Limb3, в параметр PHP [[http://ru2.php.net/manual/en/ini.core.php#ini.include-path|include_path]]. - Вместо стандартных require_once/include_once рекомендуется использовать аналогичную по функционалу lmb_require, которая поддерживает отложеную загрузку кода при помощи механизма [[http://ru2.php.net/manual/en/language.oop5.autoload.php|__autoload]] Например: ===== Пример подключения пакета Limb3 ===== Стандартный способ работы с пакетами заключается в: - Добавлении директории, содержащая Limb3, в параметр PHP [[http://ru2.php.net/manual/en/ini.core.php#ini.include-path|include_path]]. - Подключении [[limb3:ru:packages:core|ядра Limb3 (пакета CORE)]]. - Использовании [[limb3:ru:packages:core:global_functions#функции_для_подключения_пакетов_lmb_package|функций lmb_package_*]] для подключения пакетов. Пример: Вывод будет примерно таким: korchasa@korchasa:/www/limb$ php ./packages_example.php array(4) { [0]=> string(7) "toolkit" [1]=> string(4) "dbal" [2]=> string(10) "validation" [3]=> string(13) "active_record" } ===== Пример создания собственного пакета ===== :!: ВНИМАНИЕ! Эта часть API еще не "устоялась" и может быть изменена. Подключение пакета означает подключение его **common.inc.php** файла. В нем пакет должен "подтвердить" подключение с помощью функции lmb_package_register. Пример common.inc.php (например. наш пакет называется **captcha**): Помимо контроля над пакетами и их зависимостями, подключение пакетов дает возможность немного упростить подключение классов. Например: lmb_package_require('captcha', '/usr/local/lib/php/my_limb'); lmb_require_package_class('captcha', 'Captcha'); //буден подключен файл /usr/local/lib/php/my_limb/captcha/src/Captcha.class.php Помимо этого использование lmb_require_package_class() лучше с точки зрения производительности, т.к. во-первых использует абсолютные пути, а во-вторых вместо возможных нескольких путей из get_include_path() используется всего один.