public function EntityReferenceItemNormalizer::normalize in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php \Drupal\hal\Normalizer\EntityReferenceItemNormalizer::normalize()
Normalizes an object into a set of arrays/scalars.
Parameters
object $object object to normalize:
string $format format the normalization result will be encoded as:
array $context Context options for the normalizer:
Return value
array|string|bool|int|float|null
Overrides FieldItemNormalizer::normalize
File
- core/
modules/ hal/ src/ Normalizer/ EntityReferenceItemNormalizer.php, line 57 - Contains \Drupal\hal\Normalizer\EntityReferenceItemNormalizer.
Class
- EntityReferenceItemNormalizer
- Converts the Drupal entity reference item object to HAL array structure.
Namespace
Drupal\hal\NormalizerCode
public function normalize($field_item, $format = NULL, array $context = array()) {
/** @var $field_item \Drupal\Core\Field\FieldItemInterface */
$target_entity = $field_item
->get('entity')
->getValue();
// If this is not a content entity, let the parent implementation handle it,
// only content entities are supported as embedded resources.
if (!$target_entity instanceof FieldableEntityInterface) {
return parent::normalize($field_item, $format, $context);
}
// If the parent entity passed in a langcode, unset it before normalizing
// the target entity. Otherwise, untranslatable fields of the target entity
// will include the langcode.
$langcode = isset($context['langcode']) ? $context['langcode'] : NULL;
unset($context['langcode']);
$context['included_fields'] = array(
'uuid',
);
// Normalize the target entity.
$embedded = $this->serializer
->normalize($target_entity, $format, $context);
$link = $embedded['_links']['self'];
// If the field is translatable, add the langcode to the link relation
// object. This does not indicate the language of the target entity.
if ($langcode) {
$embedded['lang'] = $link['lang'] = $langcode;
}
// The returned structure will be recursively merged into the normalized
// entity so that the items are properly added to the _links and _embedded
// objects.
$field_name = $field_item
->getParent()
->getName();
$entity = $field_item
->getEntity();
$field_uri = $this->linkManager
->getRelationUri($entity
->getEntityTypeId(), $entity
->bundle(), $field_name, $context);
return array(
'_links' => array(
$field_uri => array(
$link,
),
),
'_embedded' => array(
$field_uri => array(
$embedded,
),
),
);
}