- Модуль: 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;
}