Как стать автором
Обновить

Mikron. PHP ORM

Время на прочтение5 мин
Количество просмотров2.2K
Простые вещи должны быть простыми, а сложные вещи — возможными)
(Ларри Уолл)


Скачать дистрибутив можно из репозитория: bitbucket.org/sciner/mikron-php-orm
Инструкция по установке чуть ниже, либо можете взять из самого дистрибутива по пути /mikron/admin/help/install.txt


Что это такое и что позволяет:


Эти строки отлично характеризуют концепцию, заложенную в Mikron. Полгода назад я начал разработку собственной php-orm системы. На данный момент много чего реализовал, думаю, настал момент вывести продукт на суд общественности.

Mikron, позволяет проектировать и управлять одновременно несколькими сайтами. Естественно для каждого сайта выделяется отдельная папка, БД и прочее.

С чего начинается:


Проектирование сайта начинается с описания сущностей в файле(ах) схем. Сущности описываются в XML-файлах. В системе может быть неограниченное число таких файлов. Есть возможность их динамической подгрузки, методом
$mikron->Schema->Add($file, $schema_name);
. В итоге все сущности единовременно компилируются, т.е. создаются маппинги на БД и классы. Все классы наследуются от базового, в котором реализованы основные методы. Каждая сущность имеет набор полей, которые могут быть различного типа.
Существует собственные типы полей ORM, picture, password…
В качестве типа поля сущность может иметь другую сущность(parent), либо коллекцию сущностей (child list).
Также типом поля может быть справочник «ENUM» описанный.

Конфигурация:


Файл схемы представляет собой XML-корректный файл в кодировке UTF-8. В файле схем описываются справочники и сущности.

Пример описания сущности «Сообщение»:
<entity name="T_MESSAGE" description="Сообщение" inmenu="Сайт/Сообщения" displayname="{{USER}}">
    <field name="contacts" type="varchar(64)" description="E-mail" validator="required: true" />
    <field name="user" type="T_USER" description="Пользователь" hidden="1" default="mikron:user()" />
    <field name="state" type="STATES" description="Состояние" hidden="1" default="1" />
    <field name="dt" type="datetime" description="Добавлено" hidden="1" default="now()" />
  </entity></code>

Пример описания справочника:
<code>  <enum name="STATES" description="Состояния">
    <element name="active" value="1" description="Активен" />
    <element name="hidden" value="2" description="Скрыт" />
    <element name="deleted" value="3" description="Удален" hidden="1"/>
    <element name="closed" value="4" description="Закрыт" hidden="1"/>
  </enum>

, где атрибут hidden у элемента element означает видимость элемента в списке на форме редактирования.

Ключевые возможности:


В Mikron есть куча встроенных модулей, подгружаются при необходимости таким образом:
$mikron->Modules->LoadModule('slidewindow');
. Также в системе есть свой движок исполняемых инструкций, совместимый с Smarty.

В любой момент существует возможность сделать резервную копию всего сайта, а также восстановить сайт из резервной копии для этого предусмотрен пункт меню [Система] → [Экспорт, импорт]

Системой поддерживается морфологический поиск. Вызывается так:
$mikron->EntityManager->search("текст поиска");

Возвращается массив с проинициализированными сущностями всех типов поддерживающих поиск.

Абстракция базы данных:


Выборка массива сущностей определенного типа:
$res = $mikron->Queries->Query("T_USER", [aId = null], [Criteria/Criterion], …);

Выборка одного экземпляра сущности определенного типа:
$<code>user = $mikron->Queries->QueryOne("T_USER");
Если не удалось загрузить сущность, функция возвращает null.
Пример построения критерия:
$cr = new Criteria();<br/>
$cr->Add(new Criterion('user', $user->id));<br/>
$cr->Add(new Criterion('message/recipient', $user->id));<br/>
$links = $mikron->Queries->Query('MESSAGE_LINK', null, $cr);

Поддержка постраничного вывода:
$cr = new Criteria();<br/>
$cr->Add(new Criterion('user', $user->id));<br/>
$paginator = new MikronPaginator('meslinks', 10);<br/>
$links = $mikron->Queries->Query('MESSAGE_LINK', null, $cr, null, $paginator);<br/>
$mikron->EntityManager->ShowList($links);<br/>
$paginator->Draw();

Работа с сущностями:


Создание нового экземпляра сущности:
$user = new T_USER();

Чтение сущности из БД зная ID:
$user = new T_USER($id);

Вызов автоматической формы создания или редактирования экземпляра сущности:
$mikron->EntityManager->ShowForm(new T_USER());

Вывод сущности, используя произвольный шаблон:
echo $user->toStringEx('Пользователь {name}<br />Страна: {country/name}<br />ID страны: {country->value}');

Отсюда видно, что внутри шаблона поддерживается вывод значений parent—атрибутов указав путь к ним. Например здесь {country/name} выведет название страны, а выведет идентификатор {country->value} объекта.
Пример создания, сохранения и чтения сущности:
$user = new T_USER();<br/>
$user->login->value = "SCINER";<br/>
$user->password->value = "123";<br/>
$user->contacts->value = "sciner@yandex.ru";<br/>
$user->Save();<br/>
$addeduser = new T_USER($user->id);

Короткий метод считывания атрибута сущности:
// Загружаем объект<br/>
$mes = new MESSAGE_LINK(3);<br/>
// обычный способ<br/>
echo $mes->message->value->recipient->value->country->value->name->value;<br/>
// короткий способ<br/>
echo $mes->getValue('message/recipient/country/name');

Доступ и безопасность:


В системе организован контроль доступа с использованием такого понятия как роль, которая реализована в виде сущности T_ROLE. Проверить наличие роли у текущего пользователя можно таким методом:
$mikron->Users->CurrentUser()->hasRole('patient');

Управление доступом осуществляется в администраторском модуле в меню Система\Доступ;
P.S. Все сразу рассказывать здесь не буду. Но после регистрации планирую здесь все показать и рассказать, а также отвечу на все вопросы. Очень хочу развить Mikron коллективным разумом. Заранее всем благодарен
Теги:
Хабы:
Всего голосов 19: ↑8 и ↓11-3
Комментарии68

Публикации

Истории

Работа

PHP программист
168 вакансий

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань