class FieldItemNormalizer in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/modules/hal/src/Normalizer/FieldItemNormalizer.php \Drupal\hal\Normalizer\FieldItemNormalizer
Converts the Drupal field item object structure to HAL array structure.
Hierarchy
- class \Symfony\Component\Serializer\Normalizer\SerializerAwareNormalizer implements SerializerAwareInterface
- class \Drupal\serialization\Normalizer\NormalizerBase implements NormalizerInterface
- class \Drupal\hal\Normalizer\NormalizerBase implements DenormalizerInterface
- class \Drupal\hal\Normalizer\FieldItemNormalizer
- class \Drupal\hal\Normalizer\NormalizerBase implements DenormalizerInterface
- class \Drupal\serialization\Normalizer\NormalizerBase implements NormalizerInterface
Expanded class hierarchy of FieldItemNormalizer
3 files declare their use of FieldItemNormalizer
- FieldItemNormalizerDenormalizeExceptionsUnitTest.php in core/
modules/ hal/ tests/ src/ Unit/ FieldItemNormalizerDenormalizeExceptionsUnitTest.php - Contains \Drupal\Tests\hal\Unit\FieldItemNormalizerDenormalizeExceptionsUnitTest.
- FileNormalizeTest.php in core/
modules/ hal/ src/ Tests/ FileNormalizeTest.php - Contains \Drupal\hal\Tests\FileNormalizeTest.
- NormalizerTestBase.php in core/
modules/ hal/ src/ Tests/ NormalizerTestBase.php - Contains \Drupal\hal\Tests\NormalizerTestBase.
1 string reference to 'FieldItemNormalizer'
- hal.services.yml in core/
modules/ hal/ hal.services.yml - core/modules/hal/hal.services.yml
1 service uses FieldItemNormalizer
File
- core/
modules/ hal/ src/ Normalizer/ FieldItemNormalizer.php, line 16 - Contains \Drupal\hal\Normalizer\FieldItemNormalizer.
Namespace
Drupal\hal\NormalizerView source
class FieldItemNormalizer extends NormalizerBase {
/**
* The interface or class that this Normalizer supports.
*
* @var string
*/
protected $supportedInterfaceOrClass = 'Drupal\\Core\\Field\\FieldItemInterface';
/**
* {@inheritdoc}
*/
public function normalize($field_item, $format = NULL, array $context = array()) {
$values = $field_item
->toArray();
if (isset($context['langcode'])) {
$values['lang'] = $context['langcode'];
}
// The values are wrapped in an array, and then wrapped in another array
// keyed by field name so that field items can be merged by the
// FieldNormalizer. This is necessary for the EntityReferenceItemNormalizer
// to be able to place values in the '_links' array.
$field = $field_item
->getParent();
return array(
$field
->getName() => array(
$values,
),
);
}
/**
* {@inheritdoc}
*/
public function denormalize($data, $class, $format = NULL, array $context = array()) {
if (!isset($context['target_instance'])) {
throw new InvalidArgumentException('$context[\'target_instance\'] must be set to denormalize with the FieldItemNormalizer');
}
if ($context['target_instance']
->getParent() == NULL) {
throw new InvalidArgumentException('The field item passed in via $context[\'target_instance\'] must have a parent set.');
}
$field_item = $context['target_instance'];
// If this field is translatable, we need to create a translated instance.
if (isset($data['lang'])) {
$langcode = $data['lang'];
unset($data['lang']);
$field_definition = $field_item
->getFieldDefinition();
if ($field_definition
->isTranslatable()) {
$field_item = $this
->createTranslatedInstance($field_item, $langcode);
}
}
$field_item
->setValue($this
->constructValue($data, $context));
return $field_item;
}
/**
* Build the field item value using the incoming data.
*
* @param $data
* The incoming data for this field item.
* @param $context
* The context passed into the Normalizer.
*
* @return mixed
* The value to use in Entity::setValue().
*/
protected function constructValue($data, $context) {
return $data;
}
/**
* Get a translated version of the field item instance.
*
* To indicate that a field item applies to one translation of an entity and
* not another, the property path must originate with a translation of the
* entity. This is the reason for using target_instances, from which the
* property path can be traversed up to the root.
*
* @param \Drupal\Core\Field\FieldItemInterface $field_item
* The untranslated field item instance.
* @param $langcode
* The langcode.
*
* @return \Drupal\Core\Field\FieldItemInterface
* The translated field item instance.
*/
protected function createTranslatedInstance(FieldItemInterface $item, $langcode) {
// Remove the untranslated item that was created for the default language
// by FieldNormalizer::denormalize().
$items = $item
->getParent();
$delta = $item
->getName();
unset($items[$delta]);
// Instead, create a new item for the entity in the requested language.
$entity = $item
->getEntity();
$entity_translation = $entity
->hasTranslation($langcode) ? $entity
->getTranslation($langcode) : $entity
->addTranslation($langcode);
$field_name = $item
->getFieldDefinition()
->getName();
return $entity_translation
->get($field_name)
->appendItem();
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
FieldItemNormalizer:: |
protected | property |
The interface or class that this Normalizer supports. Overrides NormalizerBase:: |
1 |
FieldItemNormalizer:: |
protected | function | Build the field item value using the incoming data. | 1 |
FieldItemNormalizer:: |
protected | function | Get a translated version of the field item instance. | |
FieldItemNormalizer:: |
public | function |
Denormalizes data back into an object of the given class. Overrides DenormalizerInterface:: |
|
FieldItemNormalizer:: |
public | function |
Normalizes an object into a set of arrays/scalars. Overrides NormalizerInterface:: |
1 |
NormalizerBase:: |
protected | property | The formats that the Normalizer can handle. | |
NormalizerBase:: |
protected | function | Checks if the provided format is supported by this normalizer. | |
NormalizerBase:: |
public | function |
Implements \Symfony\Component\Serializer\Normalizer\DenormalizerInterface::supportsDenormalization() Overrides NormalizerBase:: |
|
NormalizerBase:: |
public | function |
Checks whether the given class is supported for normalization by this normalizer. Overrides NormalizerBase:: |
|
SerializerAwareNormalizer:: |
protected | property | ||
SerializerAwareNormalizer:: |
public | function |
Sets the owning Serializer object. Overrides SerializerAwareInterface:: |