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