core_context-8.x-1.x-dev/src/Plugin/Field/FieldType/ContextItem.php
src/Plugin/Field/FieldType/ContextItem.php
<?php
namespace Drupal\core_context\Plugin\Field\FieldType;
use Drupal\Core\Field\FieldItemBase;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\TypedData\DataDefinition;
/**
* Plugin implementation of the 'context' field type.
*
* @FieldType(
* id = "context",
* label = @Translation("Context"),
* description = @Translation("An arbitrary value."),
* list_class = "\Drupal\Core\Field\FieldItemList",
* no_ui = TRUE,
* cardinality = \Drupal\Core\Field\FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
* )
*
* @property string id
* @property string type
* @property string label
* @property string description
* @property mixed value
* @property \Drupal\Component\Plugin\Context\ContextInterface context
*/
final class ContextItem extends FieldItemBase {
/**
* {@inheritdoc}
*/
public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
$definitions = [];
$definitions['id'] = DataDefinition::create('string')
->setRequired(TRUE)
->setLabel(new TranslatableMarkup('Context ID'));
$definitions['type'] = DataDefinition::create('string')
->setRequired(TRUE)
->setLabel(new TranslatableMarkup('Data type'));
$definitions['label'] = DataDefinition::create('string')
->setRequired(TRUE)
->setLabel(new TranslatableMarkup('Label'));
$definitions['description'] = DataDefinition::create('string')
->setLabel(new TranslatableMarkup('Description'));
$definitions['value'] = DataDefinition::create('any')
->setRequired(TRUE)
->setLabel(new TranslatableMarkup('Value'));
return $definitions;
}
/**
* {@inheritdoc}
*/
public static function schema(FieldStorageDefinitionInterface $field_definition) {
return [
'columns' => [
'id' => [
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
],
'type' => [
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
],
'label' => [
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
],
'description' => [
'type' => 'text',
'size' => 'normal',
],
'value' => [
'type' => 'blob',
'size' => 'normal',
'serialize' => TRUE,
'not null' => TRUE,
],
],
];
}
}
