我已经构建了一个运行良好的自定义实体。我的一个字段是分类法,但我无法在显示我的记录的buildRow(EntityInterface $entity)
函数中检索该术语的名称。
对于一个简单的字符串字段,我执行:$row['foo'] = $entity->foo->value;
如何进行entity_reference的分类术语:$row['bar'] = $entity->BAR_TERM_NAME;
感谢您的帮助。
答案 0 :(得分:2)
要按要求工作,您需要3件事:
查看关于FieldTypes, FieldWidgets and FieldFormatters的Drupal 8文档。
您的实体中的字段 foo 应使用 entity_reference 字段类型生成。
public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
// Some code ...
$fields['foo'] = BaseFieldDefinition::create('entity_reference')
->setLabel($this->t('Foo field'))
->setDescription($this->t('The Foo field.'))
->setSetting('target_type', 'taxonomy_term')
->setSetting('handler', 'default')
->setSetting('handler_settings', ['target_bundles' => ['vocabulary_id' => 'vocabulary_id']])
->setDisplayOptions('view', [
'label' => 'hidden',
'type' => 'vocabulary_id',
'weight' => 0,
])
->setDisplayOptions('form', [
'type' => 'options_select',
'weight' => 40,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
// Some code ...
}
然后你应该用你想要链接的词汇替换3 vocabulary_id 。
与 baseFieldDefinitions 相同的类。
// Some code ...
public function getFoo() {
return $this->get('foo')->value;
}
// Some code ...
在 ListBuilder 类中。
public function buildRow(EntityInterface $entity) {
// Some code ...
$row['foo'] = $entity->getFoo();
// Some code ...
}
希望它会对你有所帮助!