Просмотров: 64803
Дата последнего изменения: 08.11.2023
Татьяна Старкова
Сложность урока:
4 уровень - сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.
1
2
3
4
5
Недоступно в лицензиях:
Ограничений нет
Автоматическая генерация
Для использования генератора ORM классов перейдите на страницу Настройки > Настройки продукта > Настройки модулей > Монитор производительности (модуль Монитор производительности (perfmon) должен быть установлен) и на вкладке
Генератор таблетов
Вкладка доступна с версии 20.0.100 модуля Монитор производительности (perfmon).
отметьте поле Разрешить генерацию таблетов для ORM.
У генератора имеются следующие параметры:
Параметр
Описание
Использовать короткие алиасы классов
При включенной опции вызовы классов будут вида:
new IntegerField('ИМЯ_ПОЛЯ')
new LengthValidator(null, 255)
new Reference()
При выключенной:
new Fields\IntegerField('ИМЯ_ПОЛЯ')
new Fields\Validators\LengthValidator(null, 255)
new Fields\Relations\Reference()
Описание параметров полей таблета через методы
При включенной опции практически все параметры поля задаются через вызовы соответствующих методов:
(new StringField('API_CODE'))->configureSize(50)
При выключенной:
new StringField('API_CODE', ['size' => 50])
Имена полей в карте
При включенной опции метод getMap таблета будет возвращать массив, где индексами являются имена полей. При выключенной - нумерованный массив.
Использование генератора ORM классов до версии perfmon 20.0.100
Для использования генератора ORM классов перейдите на страницу Настройки > Производительность > Таблицы (должен быть установлен модуль Монитор производительности (perfmon)) и добавьте в адресную строку GET-параметр orm=y. Адрес будет выглядеть так: http://_ваш_сайт_/bitrix/admin/perfmon_tables.php?lang=ru&orm=y.
После перезагрузки страницы станет доступен пункт в меню - ORM.
После включения генератора таблетов на странице Настройки > Производительность > Таблицы
в меню действий станет доступен пункт ORM.
Примечание: Имена файлов таблетов предлагаются с суффиксом table (Например: было product.php, стало - producttable.php).
Примечание: Описания полей создаются в виде создания объектов-наследников \Bitrix\Main\ORM\Data\Field (а не в виде ассоциативных массивов как было до версии 20.0.100 модуля perfmon )
Для полей типа timestamp / date / datetime анализируется дефолтное значение (sql). Если это функция, возвращающая текущее время, то в таблете создается функция для получения текущего времени/даты:
'default' => function()
{
return new DateTime();
}
Другие особенности для полей:
Поле помечается как mandatory только в случае, когда поле является обязательным и не имеет значения по-умолчанию;
Поля типа text / mediumtext не помечаются как строка.
Пример
Пример автоматического создания ORM-класса
Рассмотрим пример автоматического создания ORM-класса для штатной таблицы шаблонов сайта b_site_template. Воспользуемся пунктом ORM и получим следующий код:
<?php
namespace Bitrix\Site;
use Bitrix\Main\Localization\Loc,
Bitrix\Main\ORM\Data\DataManager,
Bitrix\Main\ORM\Fields\IntegerField,
Bitrix\Main\ORM\Fields\StringField,
Bitrix\Main\ORM\Fields\Validators\LengthValidator;
Loc::loadMessages(__FILE__);
/**
* Class TemplateTable
*
* Fields:
* <ul>
* <li> ID int mandatory
* <li> SITE_ID string(2) mandatory
* <li> CONDITION string(255) optional
* <li> SORT int optional default 500
* <li> TEMPLATE string(255) mandatory
* </ul>
*
* @package Bitrix\Site
**/
class TemplateTable extends DataManager
{
/**
* Returns DB table name for entity.
*
* @return string
*/
public static function getTableName()
{
return 'b_site_template';
}
/**
* Returns entity map definition.
*
* @return array
*/
public static function getMap()
{
return [
new IntegerField(
'ID',
[
'primary' => true,
'autocomplete' => true,
'title' => Loc::getMessage('TEMPLATE_ENTITY_ID_FIELD')
]
),
new StringField(
'SITE_ID',
[
'required' => true,
'validation' => [__CLASS__, 'validateSiteId'],
'title' => Loc::getMessage('TEMPLATE_ENTITY_SITE_ID_FIELD')
]
),
new StringField(
'CONDITION',
[
'validation' => [__CLASS__, 'validateCondition'],
'title' => Loc::getMessage('TEMPLATE_ENTITY_CONDITION_FIELD')
]
),
new IntegerField(
'SORT',
[
'default' => 500,
'title' => Loc::getMessage('TEMPLATE_ENTITY_SORT_FIELD')
]
),
new StringField(
'TEMPLATE',
[
'required' => true,
'validation' => [__CLASS__, 'validateTemplate'],
'title' => Loc::getMessage('TEMPLATE_ENTITY_TEMPLATE_FIELD')
]
),
];
}
/**
* Returns validators for SITE_ID field.
*
* @return array
*/
public static function validateSiteId()
{
return [
new LengthValidator(null, 2),
];
}
/**
* Returns validators for CONDITION field.
*
* @return array
*/
public static function validateCondition()
{
return [
new LengthValidator(null, 255),
];
}
/**
* Returns validators for TEMPLATE field.
*
* @return array
*/
public static function validateTemplate()
{
return [
new LengthValidator(null, 255),
];
}
}
File: /bitrix/modules/site/lang/ru/lib/templatetable.php
<?
$MESS["TEMPLATE_ENTITY_ID_FIELD"] = "";
$MESS["TEMPLATE_ENTITY_SITE_ID_FIELD"] = "";
$MESS["TEMPLATE_ENTITY_CONDITION_FIELD"] = "";
$MESS["TEMPLATE_ENTITY_SORT_FIELD"] = "";
$MESS["TEMPLATE_ENTITY_TEMPLATE_FIELD"] = "";
?>
Таблицы базы данных
Преобразовав этот результат нужным образом получим настоящий класс для работы с шаблонами, расположенный по пути /bitrix/modules/site/lib/templatetable.php.