Простые вещи должны быть простыми, а сложные вещи — возможными)
(Ларри Уолл)
Скачать дистрибутив можно из репозитория: bitbucket.org/sciner/mikron-php-orm
Инструкция по установке чуть ниже, либо можете взять из самого дистрибутива по пути /mikron/admin/help/install.txt
Эти строки отлично характеризуют концепцию, заложенную в Mikron. Полгода назад я начал разработку собственной php-orm системы. На данный момент много чего реализовал, думаю, настал момент вывести продукт на суд общественности.
Mikron, позволяет проектировать и управлять одновременно несколькими сайтами. Естественно для каждого сайта выделяется отдельная папка, БД и прочее.
Проектирование сайта начинается с описания сущностей в файле(ах) схем. Сущности описываются в XML-файлах. В системе может быть неограниченное число таких файлов. Есть возможность их динамической подгрузки, методом
Существует собственные типы полей ORM, picture, password…
В качестве типа поля сущность может иметь другую сущность(parent), либо коллекцию сущностей (child list).
Также типом поля может быть справочник «ENUM» описанный.
Файл схемы представляет собой XML-корректный файл в кодировке UTF-8. В файле схем описываются справочники и сущности.
Пример описания сущности «Сообщение»:
(Ларри Уолл)
Скачать дистрибутив можно из репозитория: 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 коллективным разумом. Заранее всем благодарен