- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/entity/base.php
- Класс: BitrixMainEntityBase
- Вызов: Base::initializeField
public function initializeField($fieldName, $fieldInfo)
{
if ($fieldInfo instanceof Field)
{
$field = $fieldInfo;
// rewrite name
if (!empty($fieldName) && !is_numeric($fieldName))
{
$field->setName($fieldName);
}
}
elseif (!empty($fieldInfo['reference']))
{
if (is_string($fieldInfo['data_type']) && strpos($fieldInfo['data_type'], '\') === false)
{
// if reference has no namespace, then it'is in the same namespace
$fieldInfo['data_type'] = $this->getNamespace().$fieldInfo['data_type'];
}
//$refEntity = Base::getInstance($fieldInfo['data_type']."Table");
$field = new ReferenceField($fieldName, $fieldInfo['data_type'], $fieldInfo['reference'], $fieldInfo);
}
elseif (!empty($fieldInfo['expression']))
{
$expression = array_shift($fieldInfo['expression']);
$buildFrom = $fieldInfo['expression'];
$field = new ExpressionField($fieldName, $expression, $buildFrom, $fieldInfo);
}
elseif (!empty($fieldInfo['USER_TYPE_ID']))
{
$field = new UField($fieldInfo);
}
else
{
$fieldClass = Base::snake2camel($fieldInfo['data_type']) . 'Field';
$fieldClass = __NAMESPACE__.'\'.$fieldClass;
if (strlen($fieldInfo['data_type']) && class_exists($fieldClass))
{
$field = new $fieldClass($fieldName, $fieldInfo);
}
elseif (strlen($fieldInfo['data_type']) && class_exists($fieldInfo['data_type']))
{
$fieldClass = $fieldInfo['data_type'];
$field = new $fieldClass($fieldName, $fieldInfo);
}
else
{
throw new MainArgumentException(sprintf(
'Unknown data type "%s" found for `%s` field in %s Entity.',
$fieldInfo['data_type'], $fieldName, $this->getName()
));
}
}
$field->setEntity($this);
return $field;
}