public function KeyValueEntityStorage::doCreate in Drupal 10
Same name and namespace in other branches
- 8 core/lib/Drupal/Core/Entity/KeyValueStore/KeyValueEntityStorage.php \Drupal\Core\Entity\KeyValueStore\KeyValueEntityStorage::doCreate()
- 9 core/lib/Drupal/Core/Entity/KeyValueStore/KeyValueEntityStorage.php \Drupal\Core\Entity\KeyValueStore\KeyValueEntityStorage::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/ KeyValueStore/ KeyValueEntityStorage.php, line 93
Class
- KeyValueEntityStorage
- Provides a key value backend for entities.
Namespace
Drupal\Core\Entity\KeyValueStoreCode
public function doCreate(array $values = []) {
// Set default language to site default if not provided.
$values += [
$this
->getEntityType()
->getKey('langcode') => $this->languageManager
->getDefaultLanguage()
->getId(),
];
$entity_class = $this
->getEntityClass();
$entity = new $entity_class($values, $this->entityTypeId);
// @todo This is handled by ContentEntityStorageBase, which assumes
// FieldableEntityInterface. The current approach in
// https://www.drupal.org/node/1867228 improves this but does not solve it
// completely.
if ($entity instanceof FieldableEntityInterface) {
foreach ($entity as $name => $field) {
if (isset($values[$name])) {
$entity->{$name} = $values[$name];
}
elseif (!array_key_exists($name, $values)) {
$entity
->get($name)
->applyDefaultValue();
}
unset($values[$name]);
}
}
return $entity;
}