- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/orm/entity.php
- Класс: BitrixMainORMEntity
- Вызов: Entity::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
));
}
/** @var DataManager $fullEntityName */
$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;
}
$parentClass = !empty($parameters['parent']) ? $parameters['parent'] : DataManager::class;
// build entity code
$classCode = $classCode."class {$entityName} extends \".$parentClass." {";
$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).';}';
}
if (!empty($parameters['default_scope']))
{
$classCode .= 'public static function setDefaultScope($query){'.$parameters['default_scope'].'}';
}
if (isset($parameters['parent_map']) && $parameters['parent_map'] == false)
{
$classCode .= 'public static function getMap(){return [];}';
}
if(isset($parameters['object_parent']) && is_a($parameters['object_parent'], EntityObject::class, true))
{
$classCode .= 'public static function getObjectParentClass(){return '.var_export($parameters['object_parent'], true).';}';
}
// create entity
eval($classCode.$classCodeEnd);
$entity = $fullEntityName::getEntity();
// add fields
if (!empty($fields))
{
foreach ($fields as $fieldName => $field)
{
$entity->addField($field, $fieldName);
}
}
return $entity;
}