Same name in this branch
  1. 10 core/modules/file/src/Entity/File.php \Drupal\file\Entity\File
  2. 10 core/lib/Drupal/Core/Render/Element/File.php \Drupal\Core\Render\Element\File
  3. 10 core/modules/file/src/Plugin/views/field/File.php \Drupal\file\Plugin\views\field\File
  4. 10 core/modules/file/src/Plugin/views/wizard/File.php \Drupal\file\Plugin\views\wizard\File
  5. 10 core/modules/media/src/Plugin/media/Source/File.php \Drupal\media\Plugin\media\Source\File
  6. 10 core/modules/file/src/Plugin/migrate/source/d6/File.php \Drupal\file\Plugin\migrate\source\d6\File
  7. 10 core/modules/file/src/Plugin/migrate/source/d7/File.php \Drupal\file\Plugin\migrate\source\d7\File
Same name and namespace in other branches
  1. 8.9.x core/modules/file/src/Entity/File.php \Drupal\file\Entity\File
  2. 9 core/modules/file/src/Entity/File.php \Drupal\file\Entity\File

Defines the file entity class.

Plugin annotation


@ContentEntityType(
  id = "file",
  label = @Translation("File"),
  label_collection = @Translation("Files"),
  label_singular = @Translation("file"),
  label_plural = @Translation("files"),
  label_count = @PluralTranslation(
    singular = "@count file",
    plural = "@count files",
  ),
  handlers = {
    "storage" = "Drupal\file\FileStorage",
    "storage_schema" = "Drupal\file\FileStorageSchema",
    "access" = "Drupal\file\FileAccessControlHandler",
    "views_data" = "Drupal\file\FileViewsData",
    "list_builder" = "Drupal\Core\Entity\EntityListBuilder",
    "form" = {
      "delete" = "Drupal\Core\Entity\ContentEntityDeleteForm",
    },
    "route_provider" = {
      "html" = "Drupal\file\Entity\FileRouteProvider",
    },
  },
  base_table = "file_managed",
  entity_keys = {
    "id" = "fid",
    "label" = "filename",
    "langcode" = "langcode",
    "uuid" = "uuid",
    "owner" = "uid",
  },
  links = {
    "delete-form" = "/file/{file}/delete",
  }
)

Hierarchy

Expanded class hierarchy of File

Related topics

95 files declare their use of File
AccessTest.php in core/modules/file/tests/src/Kernel/AccessTest.php
CKEditor5Test.php in core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5Test.php
ContentEntityTest.php in core/modules/migrate_drupal/tests/src/Kernel/Plugin/migrate/source/ContentEntityTest.php
ContentModerationTest.php in core/modules/media_library/tests/src/FunctionalJavascript/ContentModerationTest.php
ContentTranslationFieldSyncRevisionTest.php in core/modules/content_translation/tests/src/Kernel/ContentTranslationFieldSyncRevisionTest.php

... See full list

16 string references to 'File'
ConfigTest::provideGetMessageText in core/tests/Drupal/Tests/Composer/Plugin/ProjectMessage/ConfigTest.php
file.info.yml in core/modules/file/file.info.yml
core/modules/file/file.info.yml
file.views.schema.yml in core/modules/file/config/schema/file.views.schema.yml
core/modules/file/config/schema/file.views.schema.yml
FileViewsData::getViewsData in core/modules/file/src/FileViewsData.php
Returns views data for the entity type.
FormTestDisabledElementsForm::buildForm in core/modules/system/tests/modules/form_test/src/Form/FormTestDisabledElementsForm.php
Form constructor.

... See full list

File

core/modules/file/src/Entity/File.php, line 56

Namespace

Drupal\file\Entity
View source
class File extends ContentEntityBase implements FileInterface {
  use EntityChangedTrait;
  use EntityOwnerTrait;

  /**
   * {@inheritdoc}
   */
  public function getFilename() {
    return $this
      ->get('filename')->value;
  }

  /**
   * {@inheritdoc}
   */
  public function setFilename($filename) {
    $this
      ->get('filename')->value = $filename;
  }

  /**
   * {@inheritdoc}
   */
  public function getFileUri() {
    return $this
      ->get('uri')->value;
  }

  /**
   * {@inheritdoc}
   */
  public function setFileUri($uri) {
    $this
      ->get('uri')->value = $uri;
  }

  /**
   * {@inheritdoc}
   */
  public function createFileUrl($relative = TRUE) {

    /** @var \Drupal\Core\File\FileUrlGeneratorInterface $file_url_generator */
    $file_url_generator = \Drupal::service('file_url_generator');
    return $relative ? $file_url_generator
      ->generateString($this
      ->getFileUri()) : $file_url_generator
      ->generateAbsoluteString($this
      ->getFileUri());
  }

  /**
   * {@inheritdoc}
   */
  public function getMimeType() {
    return $this
      ->get('filemime')->value;
  }

  /**
   * {@inheritdoc}
   */
  public function setMimeType($mime) {
    $this
      ->get('filemime')->value = $mime;
  }

  /**
   * {@inheritdoc}
   */
  public function getSize() {
    $filesize = $this
      ->get('filesize')->value;
    return isset($filesize) ? (int) $filesize : NULL;
  }

  /**
   * {@inheritdoc}
   */
  public function setSize($size) {
    $this
      ->get('filesize')->value = $size;
  }

  /**
   * {@inheritdoc}
   */
  public function getCreatedTime() {
    $created = $this
      ->get('created')->value;
    return isset($created) ? (int) $created : NULL;
  }

  /**
   * {@inheritdoc}
   */
  public function isPermanent() {
    return $this
      ->get('status')->value == static::STATUS_PERMANENT;
  }

  /**
   * {@inheritdoc}
   */
  public function isTemporary() {
    return $this
      ->get('status')->value == 0;
  }

  /**
   * {@inheritdoc}
   */
  public function setPermanent() {
    $this
      ->get('status')->value = static::STATUS_PERMANENT;
  }

  /**
   * {@inheritdoc}
   */
  public function setTemporary() {
    $this
      ->get('status')->value = 0;
  }

  /**
   * {@inheritdoc}
   */
  public static function preCreate(EntityStorageInterface $storage, array &$values) {

    // Automatically detect filename if not set.
    if (!isset($values['filename']) && isset($values['uri'])) {
      $values['filename'] = \Drupal::service('file_system')
        ->basename($values['uri']);
    }

    // Automatically detect filemime if not set.
    if (!isset($values['filemime']) && isset($values['uri'])) {
      $values['filemime'] = \Drupal::service('file.mime_type.guesser')
        ->guessMimeType($values['uri']);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function preSave(EntityStorageInterface $storage) {
    parent::preSave($storage);

    // The file itself might not exist or be available right now.
    $uri = $this
      ->getFileUri();
    $size = @filesize($uri);

    // Set size unless there was an error.
    if ($size !== FALSE) {
      $this
        ->setSize($size);
    }
  }

  /**
   * {@inheritdoc}
   */
  public static function preDelete(EntityStorageInterface $storage, array $entities) {
    parent::preDelete($storage, $entities);
    foreach ($entities as $entity) {

      // Delete all remaining references to this file.
      $file_usage = \Drupal::service('file.usage')
        ->listUsage($entity);
      if (!empty($file_usage)) {
        foreach ($file_usage as $module => $usage) {
          \Drupal::service('file.usage')
            ->delete($entity, $module);
        }
      }

      // Delete the actual file. Failures due to invalid files and files that
      // were already deleted are logged to watchdog but ignored, the
      // corresponding file entity will be deleted.
      try {
        \Drupal::service('file_system')
          ->delete($entity
          ->getFileUri());
      } catch (FileException $e) {

        // Ignore and continue.
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {

    /** @var \Drupal\Core\Field\BaseFieldDefinition[] $fields */
    $fields = parent::baseFieldDefinitions($entity_type);
    $fields += static::ownerBaseFieldDefinitions($entity_type);
    $fields['fid']
      ->setLabel(t('File ID'))
      ->setDescription(t('The file ID.'));
    $fields['uuid']
      ->setDescription(t('The file UUID.'));
    $fields['langcode']
      ->setLabel(t('Language code'))
      ->setDescription(t('The file language code.'));
    $fields['uid']
      ->setDescription(t('The user ID of the file.'));
    $fields['filename'] = BaseFieldDefinition::create('string')
      ->setLabel(t('Filename'))
      ->setDescription(t('Name of the file with no path components.'));
    $fields['uri'] = BaseFieldDefinition::create('file_uri')
      ->setLabel(t('URI'))
      ->setDescription(t('The URI to access the file (either local or remote).'))
      ->setSetting('max_length', 255)
      ->setSetting('case_sensitive', TRUE)
      ->addConstraint('FileUriUnique');
    $fields['filemime'] = BaseFieldDefinition::create('string')
      ->setLabel(t('File MIME type'))
      ->setSetting('is_ascii', TRUE)
      ->setDescription(t("The file's MIME type."));
    $fields['filesize'] = BaseFieldDefinition::create('integer')
      ->setLabel(t('File size'))
      ->setDescription(t('The size of the file in bytes.'))
      ->setSetting('unsigned', TRUE)
      ->setSetting('size', 'big');
    $fields['status'] = BaseFieldDefinition::create('boolean')
      ->setLabel(t('Status'))
      ->setDescription(t('The status of the file, temporary (FALSE) and permanent (TRUE).'))
      ->setDefaultValue(FALSE);
    $fields['created'] = BaseFieldDefinition::create('created')
      ->setLabel(t('Created'))
      ->setDescription(t('The timestamp that the file was created.'));
    $fields['changed'] = BaseFieldDefinition::create('changed')
      ->setLabel(t('Changed'))
      ->setDescription(t('The timestamp that the file was last changed.'));
    return $fields;
  }

  /**
   * {@inheritdoc}
   */
  public static function getDefaultEntityOwner() {
    return NULL;
  }

  /**
   * {@inheritdoc}
   */
  protected function invalidateTagsOnSave($update) {
    $tags = $this
      ->getListCacheTagsToInvalidate();

    // Always invalidate the 404 or 403 response cache because while files do
    // not have a canonical URL as such, they may be served via routes such as
    // private files.
    // Creating or updating an entity may change a cached 403 or 404 response.
    $tags = Cache::mergeTags($tags, [
      '4xx-response',
    ]);
    if ($update) {
      $tags = Cache::mergeTags($tags, $this
        ->getCacheTagsToInvalidate());
    }
    Cache::invalidateTags($tags);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
AccessibleInterface::access public function Checks data value access. 6
CacheableDependencyInterface::getCacheContexts public function The cache contexts associated with this object. 19
CacheableDependencyInterface::getCacheMaxAge public function The maximum age for which this object may be cached. 19
CacheableDependencyInterface::getCacheTags public function The cache tags associated with this object. 12
EntityChangedTrait::getChangedTime public function Gets the timestamp of the last entity change for the current translation.
EntityChangedTrait::getChangedTimeAcrossTranslations public function Returns the timestamp of the last entity change across all translations.
EntityChangedTrait::setChangedTime public function Sets the timestamp of the last entity change for the current translation.
EntityInterface::bundle public function Gets the bundle of the entity. 1
EntityInterface::create public static function Constructs a new entity object, without permanently saving it. 1
EntityInterface::createDuplicate public function Creates a duplicate of the entity. 2
EntityInterface::delete public function Deletes an entity permanently. 1
EntityInterface::enforceIsNew public function Enforces an entity to be new. 1
EntityInterface::getCacheTagsToInvalidate public function Returns the cache tags that should be used to invalidate caches. 3
EntityInterface::getConfigDependencyKey public function Gets the key that is used to store configuration dependencies. 1
EntityInterface::getConfigDependencyName public function Gets the configuration dependency name. 1
EntityInterface::getConfigTarget public function Gets the configuration target identifier for the entity. 1
EntityInterface::getEntityType public function Gets the entity type definition. 1
EntityInterface::getEntityTypeId public function Gets the ID of the type of the entity. 1
EntityInterface::getOriginalId public function Gets the original ID. 1
EntityInterface::getTypedData public function Gets a typed data object for this entity object. 1
EntityInterface::hasLinkTemplate public function Indicates if a link template exists for a given key. 1
EntityInterface::id public function Gets the identifier. 1
EntityInterface::isNew public function Determines whether the entity is new. 1
EntityInterface::label public function Gets the label of the entity. 3
EntityInterface::language public function Gets the language of the entity. 1
EntityInterface::load public static function Loads an entity. 1
EntityInterface::loadMultiple public static function Loads one or more entities. 1
EntityInterface::postCreate public function Acts on a created entity before hooks are invoked. 1
EntityInterface::postDelete public static function Acts on deleted entities before the delete hook is invoked. 7
EntityInterface::postLoad public static function Acts on loaded entities. 2
EntityInterface::postSave public function Acts on a saved entity before the insert or update hook is invoked. 8
EntityInterface::referencedEntities public function Gets a list of entities referenced by this entity. 2
EntityInterface::save public function Saves an entity permanently. 3
EntityInterface::setOriginalId public function Sets the original ID. 1
EntityInterface::toLink public function Generates the HTML for a link to this entity. 1
EntityInterface::toUrl public function Gets the URL object for the entity. 1
EntityInterface::uriRelationships public function Gets a list of URI relationships supported by this entity. 1
EntityInterface::uuid public function Gets the entity UUID (Universally Unique Identifier). 1
EntityOwnerTrait::getOwner public function 1
EntityOwnerTrait::getOwnerId public function
EntityOwnerTrait::ownerBaseFieldDefinitions public static function Returns an array of base field definitions for entity owners.
EntityOwnerTrait::setOwner public function
EntityOwnerTrait::setOwnerId public function
FieldableEntityInterface::bundleFieldDefinitions public static function Provides field definitions for a specific bundle. 2
FieldableEntityInterface::get public function Gets a field item list.
FieldableEntityInterface::getFieldDefinition public function Gets the definition of a contained field.
FieldableEntityInterface::getFieldDefinitions public function Gets an array of field definitions of all contained fields.
FieldableEntityInterface::getFields public function Gets an array of all field item lists.
FieldableEntityInterface::getTranslatableFields public function Gets an array of field item lists for translatable fields.
FieldableEntityInterface::hasField public function Determines whether the entity has a field with the given name.
FieldableEntityInterface::isValidationRequired public function Checks whether entity validation is required before saving the entity.
FieldableEntityInterface::onChange public function Reacts to changes to a field.
FieldableEntityInterface::set public function Sets a field value.
FieldableEntityInterface::setValidationRequired public function Sets whether entity validation is required before saving the entity.
FieldableEntityInterface::toArray public function Gets an array of all field values. Overrides EntityInterface::toArray
FieldableEntityInterface::validate public function Validates the currently set values. 1
File::baseFieldDefinitions public static function Provides base field definitions for an entity type. Overrides FieldableEntityInterface::baseFieldDefinitions
File::createFileUrl public function Creates a file URL for the URI of this file. Overrides FileInterface::createFileUrl
File::getCreatedTime public function Returns the file entity creation timestamp. Overrides FileInterface::getCreatedTime
File::getDefaultEntityOwner public static function Default value callback for 'owner' base field. Overrides EntityOwnerTrait::getDefaultEntityOwner
File::getFilename public function Returns the name of the file. Overrides FileInterface::getFilename
File::getFileUri public function Returns the URI of the file. Overrides FileInterface::getFileUri
File::getMimeType public function Returns the MIME type of the file. Overrides FileInterface::getMimeType
File::getSize public function Returns the size of the file. Overrides FileInterface::getSize
File::invalidateTagsOnSave protected function
File::isPermanent public function Returns TRUE if the file is permanent. Overrides FileInterface::isPermanent
File::isTemporary public function Returns TRUE if the file is temporary. Overrides FileInterface::isTemporary
File::preCreate public static function Changes the values of an entity before it is created. Overrides EntityInterface::preCreate
File::preDelete public static function Acts on entities before they are deleted and before hooks are invoked. Overrides EntityInterface::preDelete
File::preSave public function Acts on an entity before the presave hook is invoked. Overrides EntityInterface::preSave
File::setFilename public function Sets the name of the file. Overrides FileInterface::setFilename
File::setFileUri public function Sets the URI of the file. Overrides FileInterface::setFileUri
File::setMimeType public function Sets the MIME type of the file. Overrides FileInterface::setMimeType
File::setPermanent public function Sets the file status to permanent. Overrides FileInterface::setPermanent
File::setSize public function Sets the size of the file. Overrides FileInterface::setSize
File::setTemporary public function Sets the file status to temporary. Overrides FileInterface::setTemporary
FileInterface::STATUS_PERMANENT constant Indicates that the file is permanent and should not be deleted.
RefinableCacheableDependencyInterface::addCacheableDependency public function Adds a dependency on an object: merges its cacheability metadata.
RefinableCacheableDependencyInterface::addCacheContexts public function Adds cache contexts.
RefinableCacheableDependencyInterface::addCacheTags public function Adds cache tags.
RefinableCacheableDependencyInterface::mergeCacheMaxAge public function Merges the maximum age (in seconds) with the existing maximum age.
RevisionableInterface::getLoadedRevisionId public function Gets the loaded Revision ID of the entity.
RevisionableInterface::getRevisionId public function Gets the revision identifier of the entity.
RevisionableInterface::isDefaultRevision public function Checks if this entity is the default revision.
RevisionableInterface::isLatestRevision public function Checks if this entity is the latest revision.
RevisionableInterface::isNewRevision public function Determines whether a new revision should be created on save.
RevisionableInterface::preSaveRevision public function Acts on a revision before it gets saved. 3
RevisionableInterface::setNewRevision public function Enforces an entity to be saved as a new revision.
RevisionableInterface::updateLoadedRevisionId public function Updates the loaded Revision ID with the revision ID.
RevisionableInterface::wasDefaultRevision public function Checks whether the entity object was a default revision when it was saved.
SynchronizableInterface::isSyncing public function Returns whether this entity is being changed as part of a synchronization.
SynchronizableInterface::setSyncing public function Sets the status of the synchronization flag.
TranslatableInterface::addTranslation public function Adds a new translation to the translatable object.
TranslatableInterface::getTranslation public function Gets a translation of the data.
TranslatableInterface::getTranslationLanguages public function Returns the languages the data is translated to.
TranslatableInterface::getUntranslated public function Returns the translatable object in the language it was created.
TranslatableInterface::hasTranslation public function Checks there is a translation for the given language code.
TranslatableInterface::hasTranslationChanges public function Determines if the current translation of the entity has unsaved changes.
TranslatableInterface::isDefaultTranslation public function Checks whether the translation is the default one.
TranslatableInterface::isNewTranslation public function Checks whether the translation is new.
TranslatableInterface::isTranslatable public function Returns the translation support status.
TranslatableInterface::removeTranslation public function Removes the translation identified by the given language code.
TranslatableRevisionableInterface::isDefaultTranslationAffectedOnly public function Checks if untranslatable fields should affect only the default translation.
TranslatableRevisionableInterface::isLatestTranslationAffectedRevision public function Checks whether this is the latest revision affecting this translation.
TranslatableRevisionableInterface::isRevisionTranslationAffected public function Checks whether the current translation is affected by the current revision.
TranslatableRevisionableInterface::isRevisionTranslationAffectedEnforced public function Checks if the revision translation affected flag value has been enforced.
TranslatableRevisionableInterface::setRevisionTranslationAffected public function Marks the current revision translation as affected.
TranslatableRevisionableInterface::setRevisionTranslationAffectedEnforced public function Enforces the revision translation affected flag value.