42  /  330

Автоматическая генерация ORM-классов

Просмотров: 3278 (Статистика ведётся с 06.02.2017)
Дата последнего изменения: 12.07.2016

Для использования генератора ORM классов перейдите на страницу Настройки > Производительность > Таблицы (должен быть установлен модуль Монитор производительности (perfmon)) и добавьте в адресную строку GET-параметр orm=y. Адрес будет выглядеть так: http://_ваш_сайт_/bitrix/admin/perfmon_tables.php?lang=ru&orm=y.

Рассмотрим пример автоматического создания ORM-класса для штатной таблицы шаблонов сайта b_site_template.

После перезагрузки страницы станет доступен пункт в меню - ORM. Воспользовавшись им получим следующий код:

<?php
namespace Bitrix\Site;

use Bitrix\Main,
	Bitrix\Main\Localization\Loc;
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 Main\Entity\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 array(
			'ID' => array(
				'data_type' => 'integer',
				'primary' => true,
				'autocomplete' => true,
				'title' => Loc::getMessage('TEMPLATE_ENTITY_ID_FIELD'),
			),
			'SITE_ID' => array(
				'data_type' => 'string',
				'required' => true,
				'validation' => array(__CLASS__, 'validateSiteId'),
				'title' => Loc::getMessage('TEMPLATE_ENTITY_SITE_ID_FIELD'),
			),
			'CONDITION' => array(
				'data_type' => 'string',
				'validation' => array(__CLASS__, 'validateCondition'),
				'title' => Loc::getMessage('TEMPLATE_ENTITY_CONDITION_FIELD'),
			),
			'SORT' => array(
				'data_type' => 'integer',
				'title' => Loc::getMessage('TEMPLATE_ENTITY_SORT_FIELD'),
			),
			'TEMPLATE' => array(
				'data_type' => 'string',
				'required' => true,
				'validation' => array(__CLASS__, 'validateTemplate'),
				'title' => Loc::getMessage('TEMPLATE_ENTITY_TEMPLATE_FIELD'),
			),
		);
	}
	/**
	 * Returns validators for SITE_ID field.
	 *
	 * @return array
	 */
	public static function validateSiteId()
	{
		return array(
			new Main\Entity\Validator\Length(null, 2),
		);
	}
	/**
	 * Returns validators for CONDITION field.
	 *
	 * @return array
	 */
	public static function validateCondition()
	{
		return array(
			new Main\Entity\Validator\Length(null, 255),
		);
	}
	/**
	 * Returns validators for TEMPLATE field.
	 *
	 * @return array
	 */
	public static function validateTemplate()
	{
		return array(
			new Main\Entity\Validator\Length(null, 255),
		);
	}
}

File: /bitrix/modules/template/lang/ru/lib/template.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/main/lib/sitetemplate.php.

Примечание. Важная особенность генератора: поля описываются не объектами-потомками Bitrix\Main\Entity\Field, а ассоциативными массивами. Этот формат считается устаревшим, хотя поддерживается и используется во многих системных классах.


11
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии