3 namespace Drupal\Core\Field\Plugin\Field\FieldType;
5 use Drupal\Core\Field\FieldDefinitionInterface;
6 use Drupal\Core\Field\FieldStorageDefinitionInterface;
7 use Drupal\Core\TypedData\DataDefinition;
10 * Defines the 'uri' entity field type.
12 * URIs are not length limited by RFC 2616, but we need to provide a sensible
13 * default. There is a de-facto limit of 2000 characters in browsers and other
14 * implementors, so we go with 2048.
18 * label = @Translation("URI"),
19 * description = @Translation("An entity field containing a URI."),
21 * default_formatter = "uri_link",
22 * default_widget = "uri",
25 class UriItem extends StringItem {
30 public static function defaultStorageSettings() {
31 $storage_settings = parent::defaultStorageSettings();
32 // is_ascii doesn't make sense for URIs.
33 unset($storage_settings['is_ascii']);
34 $storage_settings['max_length'] = 2048;
35 return $storage_settings;
41 public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
42 $properties['value'] = DataDefinition::create('uri')
43 ->setLabel(t('URI value'))
44 ->setSetting('case_sensitive', $field_definition->getSetting('case_sensitive'))
53 public static function schema(FieldStorageDefinitionInterface $field_definition) {
58 'length' => (int) $field_definition->getSetting('max_length'),
59 'binary' => $field_definition->getSetting('case_sensitive'),
68 public function isEmpty() {
69 $value = $this->getValue();
70 if (!isset($value['value']) || $value['value'] === '') {
73 return parent::isEmpty();
79 public static function generateSampleValue(FieldDefinitionInterface $field_definition) {
80 $values = parent::generateSampleValue($field_definition);
81 $suffix_length = $field_definition->getSetting('max_length') - 7;
82 foreach ($values as $key => $value) {
83 $values[$key] = 'http://' . mb_substr($value, 0, $suffix_length);