diff --git a/core/modules/file/src/Entity/File.php b/core/modules/file/src/Entity/File.php index a9ade9e7d6..e35ff2ec91 100644 --- a/core/modules/file/src/Entity/File.php +++ b/core/modules/file/src/Entity/File.php @@ -8,6 +8,7 @@ use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Field\BaseFieldDefinition; use Drupal\file\FileInterface; +use Drupal\file\FileUriItem; use Drupal\user\UserInterface; /** @@ -250,6 +251,11 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { ->setSetting('case_sensitive', TRUE) ->addConstraint('FileUriUnique'); + // Override the default item class with a file specific implementation that + // provides an additional computed URL property. + // @see \Drupal\file\FileUriItem::propertyDefinitions() + $fields['uri']->getItemDefinition()->setClass(FileUriItem::class); + $fields['filemime'] = BaseFieldDefinition::create('string') ->setLabel(t('File MIME type')) ->setSetting('is_ascii', TRUE) diff --git a/core/modules/file/src/FileUriItem.php b/core/modules/file/src/FileUriItem.php new file mode 100644 index 0000000000..74ef1593b0 --- /dev/null +++ b/core/modules/file/src/FileUriItem.php @@ -0,0 +1,30 @@ +setLabel(t('Full URL')) + ->setSetting('case_sensitive', $field_definition->getSetting('case_sensitive')) + ->setComputed(TRUE) + ->setClass(FileUrl::class); + + return $properties; + } + +} diff --git a/core/modules/file/src/FileUrl.php b/core/modules/file/src/FileUrl.php new file mode 100644 index 0000000000..aabac350ad --- /dev/null +++ b/core/modules/file/src/FileUrl.php @@ -0,0 +1,44 @@ +url !== NULL) { + return $this->url; + } + + $this->url = $this->getParent()->getEntity()->url(); + + return $this->url; + } + + /** + * {@inheritdoc} + */ + public function setValue($value, $notify = TRUE) { + $this->url = $value; + + // Notify the parent of any changes. + if ($notify && isset($this->parent)) { + $this->parent->onChange($this->name); + } + } + +}