Рейтинг:1

How to load a file entity by uuid?

флаг us

So I am trying to use the default image for users in a menu block if a custom one does not exist. And for it I am getting the image file uuid:

$default_image = $user->get('user_picture')->getSetting('default_image');

Then loading the file entity:

$file = Drupal::service('entity.repository')->loadEntityByUuid('file', $default_image['uuid']);

This is returning null. What am I doing wrong? And is there a better way to achieve this?

Рейтинг:2
флаг ve

Может быть, это то, что вам нужно?

используйте Drupal\field\Entity\FieldConfig;
используйте Drupal\image\Entity\ImageStyle;

если (FieldConfig::loadByName('пользователь', 'пользователь', $imageFieldName)
  ->getSetting('default_image')['uuid']) {

  $imageStyle = ImageStyle::load('миниатюра');

  // Загружаем настройки изображения по умолчанию.
  $imageGetSettings = FieldConfig::loadByName('пользователь', 'пользователь', $imageFieldName)
    ->getSetting('default_image');

  // Получить URI изображения по умолчанию из настроек.
  $imageURI = Drupal::service('entity.repository')
    ->loadEntityByUuid('файл', $imageGetSettings['uuid'])
    ->получитьFileUri();

  // Создать путь к стилю изображения.
  $imageStyleURL = $imageStyle->buildUrl($imageURI);

  // Установить $изображениеURL.
  $imageURL = file_url_transform_relative($imageStyleURL);
}
Jed_BH avatar
флаг us
Я получаю uuid, но бит $imagURI возвращает ноль. Основная версия — 8.9.14, и я пытаюсь это сделать в hook_link_alter.
Prestosaurus avatar
флаг ve
Я протестировал `HOOK_link_alter()` в пользовательском модуле и действительно вижу `$imageURL` изображения по умолчанию, установленного в поле пользовательского изображения, например. `/admin/config/people/accounts/fields`. Можете ли вы подтвердить, видите ли вы `URI` с `kint($imageURI)`?
Jed_BH avatar
флаг us
Оказалось что-то другое. По какой-то причине, несмотря на то, что код возвращал uuid, в интерфейсе не отображался файл по умолчанию. Я загрузил новый файл, и он заработал.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.