/** * Tests that the FieldItemNormalizer::denormalize() throws proper exceptions. * * @param array $context * Context for FieldItemNormalizer::denormalize(). * * @dataProvider providerNormalizerDenormalizeExceptions * @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException */ public function testFieldItemNormalizerDenormalizeExceptions($context) { $field_item_normalizer = new FieldItemNormalizer(); $data = array(); $class = array(); $field_item_normalizer->denormalize($data, $class, NULL, $context); }
/** * {@inheritdoc} */ 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))); }