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()
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.
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);
}