protected function EntityReferenceFieldItemNormalizer::constructValue in Drupal 8
Same name and namespace in other branches
- 9 core/modules/serialization/src/Normalizer/EntityReferenceFieldItemNormalizer.php \Drupal\serialization\Normalizer\EntityReferenceFieldItemNormalizer::constructValue()
Build the field item value using the incoming data.
Most normalizers that extend this class can simply use this method to construct the denormalized value without having to override denormalize() and reimplementing its validation logic or its call to set the field value.
It's recommended to not override this and instead provide a (de)normalizer at the DataType level.
Parameters
mixed $data: The incoming data for this field item.
array $context: The context passed into the Normalizer.
Return value
mixed The value to use in Entity::setValue().
Overrides FieldableEntityNormalizerTrait::constructValue
File
- core/
modules/ serialization/ src/ Normalizer/ EntityReferenceFieldItemNormalizer.php, line 73
Class
- EntityReferenceFieldItemNormalizer
- Adds the file URI to embedded file entities.
Namespace
Drupal\serialization\NormalizerCode
protected function constructValue($data, $context) {
if (isset($data['target_uuid'])) {
/** @var \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem $field_item */
$field_item = $context['target_instance'];
if (empty($data['target_uuid'])) {
throw new InvalidArgumentException(sprintf('If provided "target_uuid" cannot be empty for field "%s".', $data['target_type'], $data['target_uuid'], $field_item
->getName()));
}
$target_type = $field_item
->getFieldDefinition()
->getSetting('target_type');
if (!empty($data['target_type']) && $target_type !== $data['target_type']) {
throw new UnexpectedValueException(sprintf('The field "%s" property "target_type" must be set to "%s" or omitted.', $field_item
->getFieldDefinition()
->getName(), $target_type));
}
if ($entity = $this->entityRepository
->loadEntityByUuid($target_type, $data['target_uuid'])) {
return [
'target_id' => $entity
->id(),
] + array_intersect_key($data, $field_item
->getProperties());
}
else {
// Unable to load entity by uuid.
throw new InvalidArgumentException(sprintf('No "%s" entity found with UUID "%s" for field "%s".', $data['target_type'], $data['target_uuid'], $field_item
->getName()));
}
}
return parent::constructValue($data, $context);
}