protected function ContentEntityStorageBase::doCreate in Drupal 8
Same name and namespace in other branches
- 9 core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php \Drupal\Core\Entity\ContentEntityStorageBase::doCreate()
Performs storage-specific creation of entities.
Parameters
array $values: An array of values to set, keyed by property name.
Return value
\Drupal\Core\Entity\EntityInterface
Overrides EntityStorageBase::doCreate
File
- core/
lib/ Drupal/ Core/ Entity/ ContentEntityStorageBase.php, line 103
Class
- ContentEntityStorageBase
- Base class for content entity storage handlers.
Namespace
Drupal\Core\EntityCode
protected function doCreate(array $values) {
// We have to determine the bundle first.
$bundle = FALSE;
if ($this->bundleKey) {
if (!isset($values[$this->bundleKey])) {
throw new EntityStorageException('Missing bundle for entity type ' . $this->entityTypeId);
}
// Normalize the bundle value. This is an optimized version of
// \Drupal\Core\Field\FieldInputValueNormalizerTrait::normalizeValue()
// because we just need the scalar value.
$bundle_value = $values[$this->bundleKey];
if (!is_array($bundle_value)) {
// The bundle value is a scalar, use it as-is.
$bundle = $bundle_value;
}
elseif (is_numeric(array_keys($bundle_value)[0])) {
// The bundle value is a field item list array, keyed by delta.
$bundle = reset($bundle_value[0]);
}
else {
// The bundle value is a field item array, keyed by the field's main
// property name.
$bundle = reset($bundle_value);
}
}
$entity = new $this->entityClass([], $this->entityTypeId, $bundle);
$this
->initFieldValues($entity, $values);
return $entity;
}