我有一个节点对象,其图像字段名为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
?
为什么不能通过getter访问引用的实体?如果无法立即使用,则可能会被延迟加载。
$ node-> get('imagefield')-> first()-> getTarget()如果只有一项或$ node-> get('imagefield')-> referencedEntities()...实际上最后一个是一切你需要的。
@IvanJaros不完全是:
—
SiliconMind
PHP Fatal error: Call to undefined method Drupal\image\Plugin\Field\FieldType\ImageItem::getTarget()
。但是, $node->get('imagefield')->referencedEntities()
由于事实$node->get('imagefield')
返回了EntityReferenceFieldItemList
实现referencedEntities()
方法的实例,因此可以工作。因此,您的解决方案仅是局部的-它适用于列表,但不适用于单个字段。