class EntityDataDefinition
Same name in other branches
- 8.9.x core/lib/Drupal/Core/Entity/TypedData/EntityDataDefinition.php \Drupal\Core\Entity\TypedData\EntityDataDefinition
- 10 core/lib/Drupal/Core/Entity/TypedData/EntityDataDefinition.php \Drupal\Core\Entity\TypedData\EntityDataDefinition
- 11.x core/lib/Drupal/Core/Entity/TypedData/EntityDataDefinition.php \Drupal\Core\Entity\TypedData\EntityDataDefinition
A typed data definition class for describing entities.
Hierarchy
- class \Drupal\Core\TypedData\DataDefinition implements \Drupal\Core\TypedData\DataDefinitionInterface, \Drupal\Core\TypedData\ArrayAccess uses \Drupal\Core\TypedData\TypedDataTrait
- class \Drupal\Core\TypedData\ComplexDataDefinitionBase extends \Drupal\Core\TypedData\DataDefinition implements \Drupal\Core\TypedData\ComplexDataDefinitionInterface
- class \Drupal\Core\Entity\TypedData\EntityDataDefinition extends \Drupal\Core\TypedData\ComplexDataDefinitionBase implements \Drupal\Core\Entity\TypedData\EntityDataDefinitionInterface
- class \Drupal\Core\TypedData\ComplexDataDefinitionBase extends \Drupal\Core\TypedData\DataDefinition implements \Drupal\Core\TypedData\ComplexDataDefinitionInterface
Expanded class hierarchy of EntityDataDefinition
5 files declare their use of EntityDataDefinition
- EntityAdapter.php in core/
lib/ Drupal/ Core/ Entity/ Plugin/ DataType/ EntityAdapter.php - EntityContextDefinition.php in core/
lib/ Drupal/ Core/ Plugin/ Context/ EntityContextDefinition.php - EntityFieldTest.php in core/
tests/ Drupal/ KernelTests/ Core/ Entity/ EntityFieldTest.php - EntityReferenceItem.php in core/
lib/ Drupal/ Core/ Field/ Plugin/ Field/ FieldType/ EntityReferenceItem.php - EntityTypedDataDefinitionTest.php in core/
tests/ Drupal/ KernelTests/ Core/ Entity/ EntityTypedDataDefinitionTest.php
File
-
core/
lib/ Drupal/ Core/ Entity/ TypedData/ EntityDataDefinition.php, line 10
Namespace
Drupal\Core\Entity\TypedDataView source
class EntityDataDefinition extends ComplexDataDefinitionBase implements EntityDataDefinitionInterface {
/**
* Creates a new entity definition.
*
* @param string $entity_type_id
* (optional) The ID of the entity type, or NULL if the entity type is
* unknown. Defaults to NULL.
* @param string $bundle
* (optional) The bundle of the entity type, or NULL if the bundle is
* unknown. Defaults to NULL.
*
* @return static
*/
public static function create($entity_type_id = NULL, $bundle = NULL) {
// If the entity type is known, use the derived definition.
if (isset($entity_type_id)) {
$data_type = "entity:{$entity_type_id}";
// If a bundle was given, use the bundle-specific definition.
if ($bundle) {
$data_type .= ":{$bundle}";
}
// It's possible that the given entity type ID or bundle wasn't discovered
// by the TypedData plugin manager and/or weren't created by the
// EntityDeriver. In that case, this is a new definition and we'll just
// create the definition from defaults by using an empty array.
$values = \Drupal::typedDataManager()->getDefinition($data_type, FALSE);
$definition = new static(is_array($values) ? $values : []);
// Set the EntityType constraint using the given entity type ID.
$definition->setEntityTypeId($entity_type_id);
// If available, set the Bundle constraint.
if ($bundle) {
$definition->setBundles([
$bundle,
]);
}
return $definition;
}
return new static([]);
}
/**
* {@inheritdoc}
*/
public static function createFromDataType($data_type) {
$parts = explode(':', $data_type);
if ($parts[0] != 'entity') {
throw new \InvalidArgumentException('Data type must be in the form of "entity:ENTITY_TYPE:BUNDLE."');
}
return static::create($parts[1] ?? NULL, $parts[2] ?? NULL);
}
/**
* {@inheritdoc}
*/
public function getPropertyDefinitions() {
if (!isset($this->propertyDefinitions)) {
if ($entity_type_id = $this->getEntityTypeId()) {
// Return an empty array for entities that are not content entities.
$entity_type_class = \Drupal::entityTypeManager()->getDefinition($entity_type_id)
->getClass();
if (!in_array('Drupal\\Core\\Entity\\FieldableEntityInterface', class_implements($entity_type_class))) {
$this->propertyDefinitions = [];
}
else {
// @todo: Add support for handling multiple bundles.
// See https://www.drupal.org/node/2169813.
$bundles = $this->getBundles();
if (is_array($bundles) && count($bundles) == 1) {
$this->propertyDefinitions = \Drupal::service('entity_field.manager')->getFieldDefinitions($entity_type_id, reset($bundles));
}
else {
$this->propertyDefinitions = \Drupal::service('entity_field.manager')->getBaseFieldDefinitions($entity_type_id);
}
}
}
else {
// No entity type given.
$this->propertyDefinitions = [];
}
}
return $this->propertyDefinitions;
}
/**
* {@inheritdoc}
*/
public function getDataType() {
$type = 'entity';
if ($entity_type = $this->getEntityTypeId()) {
$type .= ':' . $entity_type;
// Append the bundle only if we know it for sure and it is not the default
// bundle.
if (($bundles = $this->getBundles()) && count($bundles) == 1) {
$bundle = reset($bundles);
if ($bundle != $entity_type) {
$type .= ':' . $bundle;
}
}
}
return $type;
}
/**
* {@inheritdoc}
*/
public function getEntityTypeId() {
return $this->definition['constraints']['EntityType'] ?? NULL;
}
/**
* {@inheritdoc}
*/
public function setEntityTypeId($entity_type_id) {
return $this->addConstraint('EntityType', $entity_type_id);
}
/**
* {@inheritdoc}
*/
public function getBundles() {
$bundle = $this->definition['constraints']['Bundle'] ?? NULL;
return is_string($bundle) ? [
$bundle,
] : $bundle;
}
/**
* {@inheritdoc}
*/
public function setBundles(array $bundles = NULL) {
if (isset($bundles)) {
$this->addConstraint('Bundle', $bundles);
}
else {
// Remove the constraint.
unset($this->definition['constraints']['Bundle']);
}
return $this;
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title | Overrides |
---|---|---|---|---|---|
ComplexDataDefinitionBase::$propertyDefinitions | protected | property | An array of data definitions. | ||
ComplexDataDefinitionBase::getMainPropertyName | public | function | Returns the name of the main property, if any. | Overrides ComplexDataDefinitionInterface::getMainPropertyName | 1 |
ComplexDataDefinitionBase::getPropertyDefinition | public | function | Gets the definition of a contained property. | Overrides ComplexDataDefinitionInterface::getPropertyDefinition | |
ComplexDataDefinitionBase::__sleep | public | function | Overrides DataDefinition::__sleep | ||
DataDefinition::$definition | protected | property | The array holding values for all definition keys. | ||
DataDefinition::addConstraint | public | function | Adds a validation constraint. | Overrides DataDefinitionInterface::addConstraint | |
DataDefinition::getClass | public | function | Returns the class used for creating the typed data object. | Overrides DataDefinitionInterface::getClass | 1 |
DataDefinition::getConstraint | public | function | Returns a validation constraint. | Overrides DataDefinitionInterface::getConstraint | |
DataDefinition::getConstraints | public | function | Returns an array of validation constraints. | Overrides DataDefinitionInterface::getConstraints | 1 |
DataDefinition::getDescription | public | function | Returns a human readable description. | Overrides DataDefinitionInterface::getDescription | |
DataDefinition::getLabel | public | function | Returns a human readable label. | Overrides DataDefinitionInterface::getLabel | |
DataDefinition::getSetting | public | function | Returns the value of a given setting. | Overrides DataDefinitionInterface::getSetting | 2 |
DataDefinition::getSettings | public | function | Returns the array of settings, as required by the used class. | Overrides DataDefinitionInterface::getSettings | 2 |
DataDefinition::isComputed | public | function | Determines whether the data value is computed. | Overrides DataDefinitionInterface::isComputed | |
DataDefinition::isInternal | public | function | Determines whether the data value is internal. | Overrides DataDefinitionInterface::isInternal | 1 |
DataDefinition::isList | public | function | Returns whether the data is multi-valued, i.e. a list of data items. | Overrides DataDefinitionInterface::isList | |
DataDefinition::isReadOnly | public | function | Determines whether the data is read-only. | Overrides DataDefinitionInterface::isReadOnly | |
DataDefinition::isRequired | public | function | Determines whether a data value is required. | Overrides DataDefinitionInterface::isRequired | |
DataDefinition::offsetExists | public | function | This is for BC support only. @todo: Remove in https://www.drupal.org/node/1928868. |
||
DataDefinition::offsetGet | public | function | This is for BC support only. @todo: Remove in https://www.drupal.org/node/1928868. |
||
DataDefinition::offsetSet | public | function | This is for BC support only. @todo: Remove in https://www.drupal.org/node/1928868. |
||
DataDefinition::offsetUnset | public | function | This is for BC support only. @todo: Remove in https://www.drupal.org/node/1928868. |
||
DataDefinition::setClass | public | function | Sets the class used for creating the typed data object. | ||
DataDefinition::setComputed | public | function | Sets whether the data is computed. | ||
DataDefinition::setConstraints | public | function | Sets an array of validation constraints. | ||
DataDefinition::setDataType | public | function | Sets the data type. | 1 | |
DataDefinition::setDescription | public | function | Sets the human-readable description. | ||
DataDefinition::setInternal | public | function | Sets the whether the data value should be internal. | ||
DataDefinition::setLabel | public | function | Sets the human-readable label. | ||
DataDefinition::setReadOnly | public | function | Sets whether the data is read-only. | ||
DataDefinition::setRequired | public | function | Sets whether the data is required. | ||
DataDefinition::setSetting | public | function | Sets a definition setting. | 2 | |
DataDefinition::setSettings | public | function | Sets the array of settings, as required by the used class. | 2 | |
DataDefinition::toArray | public | function | Returns all definition values as array. | ||
DataDefinition::__construct | public | function | Constructs a new data definition object. | 1 | |
EntityDataDefinition::create | public static | function | Creates a new entity definition. | Overrides DataDefinition::create | |
EntityDataDefinition::createFromDataType | public static | function | Creates a new data definition object. | Overrides DataDefinition::createFromDataType | |
EntityDataDefinition::getBundles | public | function | Gets the array of possible entity bundles. | Overrides EntityDataDefinitionInterface::getBundles | |
EntityDataDefinition::getDataType | public | function | Returns the data type of the data. | Overrides DataDefinition::getDataType | |
EntityDataDefinition::getEntityTypeId | public | function | Gets the entity type ID. | Overrides EntityDataDefinitionInterface::getEntityTypeId | |
EntityDataDefinition::getPropertyDefinitions | public | function | Gets an array of property definitions of contained properties. | Overrides ComplexDataDefinitionBase::getPropertyDefinitions | |
EntityDataDefinition::setBundles | public | function | Sets the array of possible entity bundles. | Overrides EntityDataDefinitionInterface::setBundles | |
EntityDataDefinition::setEntityTypeId | public | function | Sets the entity type ID. | Overrides EntityDataDefinitionInterface::setEntityTypeId | |
TypedDataTrait::$typedDataManager | protected | property | The typed data manager used for creating the data types. | ||
TypedDataTrait::getTypedDataManager | public | function | Gets the typed data manager. | 2 | |
TypedDataTrait::setTypedDataManager | public | function | Sets the typed data manager. | 2 |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.