public function FieldNormalizer::normalize

Implements \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize()

Overrides NormalizerInterface::normalize

File

drupal/core/modules/hal/lib/Drupal/hal/Normalizer/FieldNormalizer.php, line 30
Contains \Drupal\hal\Normalizer\FieldNormalizer.

Class

FieldNormalizer
Converts the Drupal field structure to HAL array structure.

Namespace

Drupal\hal\Normalizer

Code

public function normalize($field, $format = NULL, array $context = array()) {
  $normalized_field_items = array();

  // Get the field definition.
  $entity = $field
    ->getParent();
  $field_name = $field
    ->getName();
  $field_definition = $entity
    ->getPropertyDefinition($field_name);

  // If this field is not translatable, it can simply be normalized without
  // separating it into different translations.
  if (empty($field_definition['translatable'])) {
    $normalized_field_items = $this
      ->normalizeFieldItems($field, $format, $context);
  }
  else {
    foreach ($entity
      ->getTranslationLanguages() as $lang) {
      $context['langcode'] = $lang->langcode == 'und' ? Language::LANGCODE_DEFAULT : $lang->langcode;
      $translation = $entity
        ->getTranslation($lang->langcode);
      $translated_field = $translation
        ->get($field_name);
      $normalized_field_items = array_merge($normalized_field_items, $this
        ->normalizeFieldItems($translated_field, $format, $context));
    }
  }

  // Merge deep so that links set in entity reference normalizers are merged
  // into the links property.
  $normalized = NestedArray::mergeDeepArray($normalized_field_items);
  return $normalized;
}