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.