Инструменты пользователя

Инструменты сайта


limb3:ru:packages_architecture

Введение в пакеты Limb3

Список пакетов Limb3

Limb3 - это фреймворк, разделенный на пакеты. Что считается пакетом? Пакет - это, по сути, некоторый узкоспециализированный функционал, расположенный в директории с определенной структурой(см. ниже). Например, есть базовый пакет CORE, пакет шаблонной системы MACRO, пакет для отображения объектов в реляционную БД 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

  1. Добавлении директории, содержащая Limb3, в параметр PHP include_path.
  2. Вместо стандартных require_once/include_once рекомендуется использовать аналогичную по функционалу lmb_require, которая поддерживает отложеную загрузку кода при помощи механизма __autoload

Например:

<?php
set_include_path('/path/to/limb/packages/parent/dir/' . PATH_SEPARATOR  . get_include_path()); 
 
// Подключение класса lmbUri из пакета NET
require_once('limb/net/http/lmbUri.class.php');
 
// Подключение класса lmbUri из пакета NET с использованием оптимизированной версии require_once 
// с поддержкой отложенной загрузки кода, т.е. в этот момент класс на самом деле еще не загружен,
// подключение класса происходит только в момент вызова new lmbUri при помощи механизма __autoload
lmb_require('limb/net/http/lmbUri.class.php');
 
$uri = new lmbUri('http://test.com');

Пример подключения пакета Limb3

Стандартный способ работы с пакетами заключается в:

  1. Добавлении директории, содержащая Limb3, в параметр PHP include_path.
  2. Подключении ядра Limb3 (пакета CORE).
  3. Использовании функций lmb_package_* для подключения пакетов.

Пример:

<?php
set_include_path('/path/to/limb/packages/parent/dir/' . PATH_SEPARATOR . get_include_path());   //добавление директории
require('limb/core/common.inc.php'); //подключение ядра
 
lmb_package_require('active_record'); //подключение пакета WEB_APP
 
var_dump(lmb_packages_list()); //вывод списка подключенных пакетов

Вывод будет примерно таким:

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):

<?php
lmb_package_require('net');
// ... инициализация пакета ....
lmb_package_register('captcha', dirname(__FILE__));

Помимо контроля над пакетами и их зависимостями, подключение пакетов дает возможность немного упростить подключение классов. Например:

  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() используется всего один.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
   ___    ____   ___    ___    __ 
  / _ \  / __/  / _ \  / _ \  / / 
 / ___/ / _/   / , _/ / , _/ / /__
/_/    /___/  /_/|_| /_/|_| /____/
 
limb3/ru/packages_architecture.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)