• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/entity/base.php
  • Класс: BitrixMainEntityBase
  • Вызов: Base::compileEntity
static function compileEntity($entityName, $fields = null, $parameters = array())
{
	$classCode = '';
	$classCodeEnd = '';

	if (strtolower(substr($entityName, -5)) !== 'table')
	{
		$entityName .= 'Table';
	}

	// validation
	if (!preg_match('/^[a-z0-9_]+$/i', $entityName))
	{
		throw new MainArgumentException(sprintf(
			'Invalid entity classname `%s`.', $entityName
		));
	}

	$fullEntityName = $entityName;

	// namespace configuration
	if (!empty($parameters['namespace']) && $parameters['namespace'] !== '\')
	{
		$namespace = $parameters['namespace'];

		if (!preg_match('/^[a-z0-9\\]+$/i', $namespace))
		{
			throw new MainArgumentException(sprintf(
				'Invalid namespace name `%s`', $namespace
			));
		}

		$classCode = $classCode."namespace {$namespace} "."{";
		$classCodeEnd = '}'.$classCodeEnd;

		$fullEntityName = '\'.$namespace.'\'.$fullEntityName;
	}

	// build entity code
	$classCode = $classCode."class {$entityName} extends \Bitrix\Main\Entity\DataManager "."{";
	$classCodeEnd = '}'.$classCodeEnd;

	if (!empty($parameters['table_name']))
	{
		$classCode .= 'public static function getTableName(){return '.var_export($parameters['table_name'], true).';}';
	}

	if (!empty($parameters['uf_id']))
	{
		$classCode .= 'public static function getUfId(){return '.var_export($parameters['uf_id'], true).';}';
	}

	// create entity
	eval($classCode.$classCodeEnd);

	$entity = self::getInstance($fullEntityName);

	// add fields
	if (!empty($fields))
	{
		foreach ($fields as $fieldName => $field)
		{
			$entity->addField($field, $fieldName);
		}
	}

	return $entity;
}