虽然我想找到最佳方法来实现这个目标,但我目前非常渴望找到任何一种实现方式。我尝试在我的主题文件中的预处理视图函数中获取图像文件名或URI值,但是一直遇到障碍。我最接近的方法是使用$node->field_photo->entity;
,并在转储时可以看到我想要获取的“filename”或“uri”值,如下面的截图所示。
以下是我迄今为止尝试过的方法:
#1) 我尝试使用$node->field_photo->entity->getFileUri();
问题:返回错误:在null上调用成员函数getFileUri()
#2) 我尝试了以下方法:
$referenceItem = $node->get('field_photo')->referencedEntities();
$referenceItem[0]->values['filename']
问题:返回 null #3) 我尝试了以下方法:
$referencedEntity = $node
->get('field_photo')
->first()
->get('entity')
->getTarget()
->getValue();
问题:返回错误:在“->get('entity')”上调用成员函数get()时为空。
#4) 我尝试从"target_id"获取图片,但两个类中都没有找到:
use Drupal\media\Entity\Media;
use Drupal\media_entity\Entity\Media;
问题:找不到任何类。 #5) 我尝试了以下操作:
// $id = some node ID
// $field = field name for entity reference field
$node = Node::load($id);
/** @var \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem $referenceItem */
$referenceItem = $node->get($field)->first();
/** @var \Drupal\Core\Entity\Plugin\DataType\EntityReference $entityReference */
$entityReference = $referenceItem->get('entity');
/** @var \Drupal\Core\Entity\Plugin\DataType\EntityAdapter $entityAdapter */
$entityAdapter = $entityReference->getTarget();
/** @var \Drupal\Core\Entity\EntityInterface $referencedEntity */
$referencedEntity = $entityAdapter->getValue();
问题:错误信息为“调用空对象的get()方法,对象名为' ->get('entity')'”
#6) 我也尝试了以下操作:
$node->field_photo->entity->field_media_image->entity->getFileUri();
问题:返回错误调用了一个空对象的getFileUri()函数。
$node->field_photo->entity
返回一个文件对象,但是$node->field_photo->entity->getFileUri();
却报告 getFileUri() 在空值上被调用,这真的没有意义。除非在视图中返回的其中一项没有设置图像/文件。在调用 getFuleUri() 函数之前,请尝试检查$node->field_photo->entity
不为 null。 - undefined