物理ファイルがDrupalで管理されているかどうかを確認し、管理されている場合はロードします。
重要な瞬間に「ファイルが見つかりません」を表示し続けるドキュメントに問題がありますが、これは機能するはずです:
_$query = \Drupal::entityQuery('file');
$query->condition('uri', $file_uri);
$entity_ids = $query->execute();
if (count($entity_ids) == 1) {
$file = \Drupal::entityLoad($entity_ids[0]);
}
_
ただし、次のメッセージが表示されます:PHP Fatal error: Call to undefined method Drupal::entityLoad()
\ Drupal :: entityLoad()のようなメソッドはありません。 エンティティタイプの静的メソッド を使用します。 「ファイル」を想定して、以下を使用する必要があります。
$file = \Drupal\file\Entity\File::load(reset($entity_ids));
Berdirはコメントで指摘しました QueryInterface :: execute() はエンティティIDまたはリビジョンIDをキーとする配列を返すため、reset()は最初の要素を取得するために使用するものです。
IDでエンティティを読み込むには、次のコードを使用できます。
/** @var \Drupal\file\FileInterface|null $file*/
$file = \Drupal::entityTypeManager()
->getStorage('file')
->load($entityId);
ただし、指定されたファイルURIでファイルエンティティをロードする必要がある場合は、loadByProperties
にEntityStorageInterface
というメソッドがあります。
/** @var \Drupal\file\FileInterface[] $files*/
$files = \Drupal::entityTypeManager()
->getStorage('file')
->loadByProperties(['uri' => $uri]);
if (!empty($files)) {
$file = reset($files);
}