У меня есть объект узла с именем поля имени field_image. Когда я делаю
$node
->get('field_image')
->first()
->getValue()
Я получаю массив с некоторыми свойствами вместо объекта сущности. Массив выглядит так:
'target_id' => string '8' (length=1)
'alt' => string '' (length=0)
'title' => string '' (length=0)
'width' => string '587' (length=3)
'height' => string '458' (length=3)
'_loaded' => boolean true
'_accessCacheability' =>
object(Drupal\Core\Cache\CacheableMetadata)[1092]
protected 'cacheContexts' =>
array (size=0)
...
protected 'cacheTags' =>
array (size=0)
...
protected 'cacheMaxAge' => int -1
Нужно ли вручную загружать файл с помощью объекта, target_idили есть способ автоматически получить объект объекта, на который ссылаются, из экземпляра Drupal\image\Plugin\Field\FieldType\ImageItem?
Почему ссылка на сущность не доступна через геттер? Это может быть лениво загружено, если это не доступно немедленно.
PHP Fatal error: Call to undefined method Drupal\image\Plugin\Field\FieldType\ImageItem::getTarget(). Однако $node->get('imagefield')->referencedEntities()работает благодаря тому, что $node->get('imagefield')возвращает экземпляр, EntityReferenceFieldItemListкоторый реализует referencedEntities()метод. Таким образом, ваше решение является лишь частичным - оно работает для списков, но не для отдельных полей.