if (empty($context['related'
]) ||
empty($field_definitions[$context['related'
]])) { throw new BadRequestHttpException('Invalid or missing related field.'
);
} /** @var \Drupal\field\Entity\FieldConfig $field_definition */
$field_definition =
$field_definitions[$context['related'
]];
$target_resource_types =
$resource_type->
getRelatableResourceTypesByField($resource_type->
getPublicName($context['related'
]));
$target_resource_type_names =
array_map(function DResourceType
$resource_type) { return $resource_type->
getTypeName();
},
$target_resource_types);
$is_multiple =
$field_definition->
getFieldStorageDefinition()->
isMultiple();
$data =
$this->
massageRelationshipInput($data,
$is_multiple);
$resource_identifiers =
array_map(function D
$value) use ($target_resource_type_names) { // Make sure that the provided type is compatible with the targeted
// resource.
if (!
in_array($value['type'
],
$target_resource_type_names)) { throw new BadRequestHttpException(sprintf( 'The provided type (%s) does not match the destination resource types (%s).',
$value['type'
],
implode(', ',
$target_resource_type_names) ));
} return new ResourceIdentifier($value['type'
],
$value['id'
],
$value['meta'
] ??
[]);
},