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