abstract class ArrayElement in Drupal 10
Same name and namespace in other branches
- 8 core/lib/Drupal/Core/Config/Schema/ArrayElement.php \Drupal\Core\Config\Schema\ArrayElement
- 9 core/lib/Drupal/Core/Config/Schema/ArrayElement.php \Drupal\Core\Config\Schema\ArrayElement
Defines a generic configuration element that contains multiple properties.
Hierarchy
- class \Drupal\Core\TypedData\TypedData implements PluginInspectionInterface, TypedDataInterface uses DependencySerializationTrait, StringTranslationTrait, TypedDataTrait
- class \Drupal\Core\Config\Schema\Element
- class \Drupal\Core\Config\Schema\ArrayElement implements \Drupal\Core\Config\Schema\IteratorAggregate, TypedConfigInterface, ComplexDataInterface
- class \Drupal\Core\Config\Schema\Element
Expanded class hierarchy of ArrayElement
File
- core/
lib/ Drupal/ Core/ Config/ Schema/ ArrayElement.php, line 10
Namespace
Drupal\Core\Config\SchemaView source
abstract class ArrayElement extends Element implements \IteratorAggregate, TypedConfigInterface, ComplexDataInterface {
/**
* Parsed elements.
*/
protected $elements;
/**
* Gets valid configuration data keys.
*
* @return array
* Array of valid configuration data keys.
*/
protected function getAllKeys() {
return is_array($this->value) ? array_keys($this->value) : [];
}
/**
* Builds an array of contained elements.
*
* @return \Drupal\Core\TypedData\TypedDataInterface[]
* An array of elements contained in this element.
*/
protected function parse() {
$elements = [];
foreach ($this
->getAllKeys() as $key) {
$value = $this->value[$key] ?? NULL;
$definition = $this
->getElementDefinition($key);
$elements[$key] = $this
->createElement($definition, $value, $key);
}
return $elements;
}
/**
* Gets data definition object for contained element.
*
* @param int|string $key
* Property name or index of the element.
*
* @return \Drupal\Core\TypedData\DataDefinitionInterface
*/
protected abstract function getElementDefinition($key);
/**
* {@inheritdoc}
*/
public function get($name) {
$parts = explode('.', $name);
$root_key = array_shift($parts);
$elements = $this
->getElements();
if (isset($elements[$root_key])) {
$element = $elements[$root_key];
// If $property_name contained a dot recurse into the keys.
while ($element && ($key = array_shift($parts)) !== NULL) {
if ($element instanceof TypedConfigInterface) {
$element = $element
->get($key);
}
else {
$element = NULL;
}
}
}
if (isset($element)) {
return $element;
}
else {
throw new \InvalidArgumentException("The configuration property {$name} doesn't exist.");
}
}
/**
* {@inheritdoc}
*/
public function getElements() {
if (!isset($this->elements)) {
$this->elements = $this
->parse();
}
return $this->elements;
}
/**
* {@inheritdoc}
*/
public function isEmpty() {
return empty($this->value);
}
/**
* {@inheritdoc}
*/
public function toArray() {
return $this->value ?? [];
}
/**
* {@inheritdoc}
*/
public function onChange($name) {
// Notify the parent of changes.
if (isset($this->parent)) {
$this->parent
->onChange($this->name);
}
}
/**
* {@inheritdoc}
*/
#[\ReturnTypeWillChange]
public function getIterator() {
return new \ArrayIterator($this
->getElements());
}
/**
* Creates a contained typed configuration object.
*
* @param \Drupal\Core\TypedData\DataDefinitionInterface $definition
* The data definition object.
* @param mixed $value
* (optional) The data value. If set, it has to match one of the supported
* data type format as documented for the data type classes.
* @param string $key
* The key of the contained element.
*
* @return \Drupal\Core\TypedData\TypedDataInterface
*/
protected function createElement($definition, $value, $key) {
return $this
->getTypedDataManager()
->create($definition, $value, $key, $this);
}
/**
* Creates a new data definition object from a type definition array and
* actual configuration data.
*
* @param array $definition
* The base type definition array, for which a data definition should be
* created.
* @param $value
* The value of the configuration element.
* @param string $key
* The key of the contained element.
*
* @return \Drupal\Core\TypedData\DataDefinitionInterface
*/
protected function buildDataDefinition($definition, $value, $key) {
return $this
->getTypedDataManager()
->buildDataDefinition($definition, $value, $key, $this);
}
/**
* Determines if this element allows NULL as a value.
*
* @return bool
* TRUE if NULL is a valid value, FALSE otherwise.
*/
public function isNullable() {
return isset($this->definition['nullable']) && $this->definition['nullable'] == TRUE;
}
/**
* {@inheritdoc}
*/
public function set($property_name, $value, $notify = TRUE) {
$this->value[$property_name] = $value;
// Config schema elements do not make use of notifications. Thus, we skip
// notifying parents.
return $this;
}
/**
* {@inheritdoc}
*/
public function getProperties($include_computed = FALSE) {
$properties = [];
foreach (array_keys($this->value) as $name) {
$properties[$name] = $this
->get($name);
}
return $properties;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ArrayElement:: |
protected | property | Parsed elements. | |
ArrayElement:: |
protected | function | Creates a new data definition object from a type definition array and actual configuration data. | |
ArrayElement:: |
protected | function | Creates a contained typed configuration object. | |
ArrayElement:: |
public | function |
Gets a contained typed configuration element. Overrides TypedConfigInterface:: |
|
ArrayElement:: |
protected | function | Gets valid configuration data keys. | |
ArrayElement:: |
abstract protected | function | Gets data definition object for contained element. | 2 |
ArrayElement:: |
public | function |
Gets an array of contained elements. Overrides TypedConfigInterface:: |
|
ArrayElement:: |
public | function | ||
ArrayElement:: |
public | function |
Gets an array of property objects. Overrides ComplexDataInterface:: |
|
ArrayElement:: |
public | function |
Determines whether the data structure is empty. Overrides TypedConfigInterface:: |
|
ArrayElement:: |
public | function | Determines if this element allows NULL as a value. | |
ArrayElement:: |
public | function |
React to changes to a child property or item. Overrides TraversableTypedDataInterface:: |
|
ArrayElement:: |
protected | function | Builds an array of contained elements. | |
ArrayElement:: |
public | function |
Sets a property value. Overrides ComplexDataInterface:: |
|
ArrayElement:: |
public | function |
Returns an array of all property values. Overrides TypedConfigInterface:: |
|
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
public | function | 2 | |
DependencySerializationTrait:: |
public | function | 2 | |
Element:: |
protected | property | The configuration value. | |
Element:: |
public | function |
Gets the typed configuration manager. Overrides TypedDataTrait:: |
|
Element:: |
public | function |
Sets the typed config manager. Overrides TypedDataTrait:: |
|
StringTranslationTrait:: |
protected | property | The string translation service. | 3 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 1 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
TypedData:: |
protected | property | The data definition. | 1 |
TypedData:: |
protected | property | The property name. | |
TypedData:: |
protected | property | The parent typed data object. | |
TypedData:: |
public | function |
Applies the default value. Overrides TypedDataInterface:: |
2 |
TypedData:: |
public static | function |
Constructs a TypedData object given its definition and context. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Gets a list of validation constraints. Overrides TypedDataInterface:: |
8 |
TypedData:: |
public | function |
Gets the data definition. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Returns the name of a property or item. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Returns the parent data structure; i.e. either complex data or a list. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
|
TypedData:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
TypedData:: |
public | function |
Returns the property path of the data. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Returns the root of the typed data tree. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Returns a string representation of the data. Overrides TypedDataInterface:: |
3 |
TypedData:: |
public | function |
Gets the data value. Overrides TypedDataInterface:: |
7 |
TypedData:: |
public | function |
Sets the context of a property or item via a context aware parent. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function |
Sets the data value. Overrides TypedDataInterface:: |
7 |
TypedData:: |
public | function |
Validates the currently set data value. Overrides TypedDataInterface:: |
|
TypedData:: |
public | function | Constructs a TypedData object given its definition and context. | 3 |
TypedDataTrait:: |
protected | property | The typed data manager used for creating the data types. |