I’m working on a custom field (Drupal 8) where the author selects a taxonomy term from defined list, but the display is of, or includes, a node that references said term. I already have a service that can retrieve the desired node based on the term id. I started with a custom FieldFormatter
for entity references, and that does a reasonable job of displaying the node information as desired.
However, what I really need is to get that node information included in a jsonapi response. I’ve made a custom FieldType
extending EntityReferenceItem
figuring all I would need is to add a computed property value (See https://www.drupal.org/node/2112677, e.g.). The examples keep pointing to the use of a specialized class extending TypedData
, but the EntityReferenceItem
treats the main property as computed, and doesn’t use that.
I also read How to properly define and return simple array computed field property but I'm not sure it's addressing the same kind of thing nor is there quite enough detail there to help me implement a solution.
class MyField extends EntityReferenceItem { ...
public function getValue() {
$values = parent::getValue();
$values['computed'] = 'foobar';
return $values;
}
}
my_module/config/schema/my_module.data_types.schema.yml -
# Schema copied and modified from the configuration of the Entity reference field type
# in docroot/core/config/schema/core.data_types.schema.yml
field.storage_settings.my_field:
type: mapping
label: 'My field storage settings'
mapping:
target_type:
type: string
label: 'Blah blah blah'
field.field_settings.my_field:
type: mapping
label: 'Another label'
mapping:
handler:
type: string
label: 'Reference method'
handler_settings:
type: entity_reference_selection.[%parent.handler]
label: 'Yet another label'
field.value.my_field:
type: mapping
label: 'Default value'
mapping:
target_id:
type: string
label: 'Value'
target_uuid:
type: uuid
# This part is new:
field.computed.my_field:
type: mapping
label: 'Hello World'
mapping:
target_id:
type: string
label: 'Computed Value'
target_uuid:
type: uuid
Any pointers out there?
My understanding is that I can set things up so that the computed
value shows up in the $items
parameter passed into my custom Formatter's viewElements()
method, and, at least as important, will be part of a JSONAPI response when my_field
is part of the include
query parameter. As of now, neither of those things occurs.