• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/orm/entity.php
  • Класс: BitrixMainORMEntity
  • Вызов: Entity::initializeField
public function initializeField($fieldName, $fieldInfo)
{
	if ($fieldInfo instanceof Field)
	{
		$field = $fieldInfo;

		// rewrite name
		if (!empty($fieldName) && !is_numeric($fieldName))
		{
			$field->setName($fieldName);
		}
	}
	elseif (is_array($fieldInfo))
	{
		if (!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 Reference($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 = StringHelper::snake2camel($fieldInfo['data_type']) . 'Field';
			$fieldClass = '\Bitrix\Main\Entity\'.$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()
				));
			}
		}
	}
	else
	{
		throw new MainArgumentException(sprintf('Unknown field type `%s`',
			is_object($fieldInfo) ? get_class($fieldInfo) : gettype($fieldInfo)
		));
	}

	$field->setEntity($this);
	$field->postInitialize();

	return $field;
}