3 namespace Drupal\Core\TypedData;
6 * A typed data definition class for defining lists.
8 class ListDataDefinition extends DataDefinition implements ListDataDefinitionInterface {
11 * The data definition of a list item.
13 * @var \Drupal\Core\TypedData\DataDefinitionInterface
15 protected $itemDefinition;
18 * Creates a new list definition.
20 * @param string $item_type
21 * The data type of the list items; e.g., 'string', 'integer' or 'any'.
23 * @return \Drupal\Core\TypedData\ListDataDefinition
24 * A new List Data Definition object.
26 public static function create($item_type) {
27 return static::createFromItemType($item_type);
33 public static function createFromDataType($type) {
34 $definition = parent::createFromDataType($type);
35 // If nothing else given, default to a list of 'any' items.
36 $definition->itemDefinition = DataDefinition::create('any');
43 public static function createFromItemType($item_type) {
44 return new static([], \Drupal::typedDataManager()->createDataDefinition($item_type));
50 public function __construct(array $values = [], DataDefinitionInterface $item_definition = NULL) {
51 $this->definition = $values;
52 $this->itemDefinition = $item_definition;
58 public function getDataType() {
65 public function setDataType($type) {
66 if ($type != 'list') {
67 throw new \LogicException('Lists must always be of data type "list".');
74 public function getClass() {
75 $class = isset($this->definition['class']) ? $this->definition['class'] : NULL;
80 // If a list definition is used but no class has been specified, derive
81 // the default list class from the item type.
82 $item_type_definition = \Drupal::typedDataManager()
83 ->getDefinition($this->getItemDefinition()->getDataType());
84 if (!$item_type_definition) {
85 throw new \LogicException("An invalid data type '{$this->getItemDefinition()->getDataType()}' has been specified for list items");
87 return $item_type_definition['list_class'];
94 public function getItemDefinition() {
95 return $this->itemDefinition;
99 * Sets the item definition.
101 * @param \Drupal\Core\TypedData\DataDefinition $definition
102 * A list item's data definition.
106 public function setItemDefinition(DataDefinitionInterface $definition) {
107 $this->itemDefinition = $definition;