web-dev-qa-db-ja.com

ファイルエンティティを読み込むにはどうすればよいですか?

物理ファイルが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()

4
Martin K

\ Drupal :: entityLoad()のようなメソッドはありません。 エンティティタイプの静的メソッド を使用します。 「ファイル」を想定して、以下を使用する必要があります。

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

Berdirはコメントで指摘しました QueryInterface :: execute() はエンティティIDまたはリビジョンIDをキーとする配列を返すため、reset()は最初の要素を取得するために使用するものです。

8
cilefen

IDでエンティティを読み込むには、次のコードを使用できます。

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

ただし、指定されたファイルURIでファイルエンティティをロードする必要がある場合は、loadByPropertiesEntityStorageInterfaceというメソッドがあります。

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

参照 ファイルエンティティをURIでロード

0
voleger