web-dev-qa-db-fra.com

Comment puis-je charger une entité File?

Je veux savoir si un fichier physique est géré par Drupal et si c'est le cas, alors chargez-le.

J'ai des problèmes avec la documentation qui affiche toujours "Fichier non trouvé" à des moments cruciaux, mais il semble que cela devrait fonctionner:

$query = \Drupal::entityQuery('file');
$query->condition('uri', $file_uri);
$entity_ids = $query->execute();
if (count($entity_ids) == 1) {
    $file = \Drupal::entityLoad($entity_ids[0]);
}

Cependant, je reçois ce message: PHP Fatal error: Call to undefined method Drupal::entityLoad()

4
Martin K

Il n'existe aucune méthode telle que\Drupal :: entityLoad (). Utilisez la méthode statique sur le type d'entité . En supposant "Fichier", vous devez utiliser:

$file = \Drupal\file\Entity\File::load(reset($entity_ids));

Berdir a souligné dans un commentaire que QueryInterface :: execute () renvoie un tableau saisi par ID d'entité ou ID de révision, donc reset () est la chose à utiliser pour obtenir le premier élément.

8
cilefen

Pour charger l'entité par ID, vous pouvez utiliser le code suivant:

/** @var \Drupal\file\FileInterface|null $file*/
$file = \Drupal::entityTypeManager()
  ->getStorage('file')
  ->load($entityId);

Mais si vous devez charger l'entité de fichier par l'URI de fichier donné, il existe une méthode appelée loadByProperties dans EntityStorageInterface:

/** @var \Drupal\file\FileInterface[] $files*/
$files = \Drupal::entityTypeManager()
  ->getStorage('file')
  ->loadByProperties(['uri' => $uri]);
if (!empty($files)) {
  $file = reset($files);
}

Voir Charger une entité de fichier par URI

0
voleger