У меня есть объект узла с именем поля имени 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()
метод. Таким образом, ваше решение является лишь частичным - оно работает для списков, но не для отдельных полей.