FieldItemNormalizer.php in JSON:API Extras 8.2
File
src/Normalizer/FieldItemNormalizer.php
View source
<?php
namespace Drupal\jsonapi_extras\Normalizer;
use Drupal\Core\Cache\CacheableMetadata;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Field\FieldItemInterface;
use Drupal\jsonapi\Normalizer\NormalizerBase;
use Drupal\jsonapi\Normalizer\FieldItemNormalizer as JsonapiFieldItemNormalizer;
use Drupal\jsonapi\Normalizer\Value\FieldItemNormalizerValue;
use Drupal\jsonapi_extras\Plugin\ResourceFieldEnhancerManager;
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
use Symfony\Component\Serializer\SerializerInterface;
class FieldItemNormalizer extends NormalizerBase implements DenormalizerInterface {
protected $supportedInterfaceOrClass = FieldItemInterface::class;
protected $subject;
protected $entityTypeManager;
protected $enhancerManager;
public function __construct(JsonapiFieldItemNormalizer $subject, EntityTypeManagerInterface $entity_type_manager, ResourceFieldEnhancerManager $enhancer_manager) {
$this->subject = $subject;
$this->entityTypeManager = $entity_type_manager;
$this->enhancerManager = $enhancer_manager;
}
public function normalize($object, $format = NULL, array $context = []) {
$normalized_output = $this->subject
->normalize($object, $format, $context);
$resource_type = $context['resource_type'];
$enhancer = $resource_type
->getFieldEnhancer($object
->getParent()
->getName());
if (!$enhancer) {
return $normalized_output;
}
$processed = $enhancer
->undoTransform($normalized_output
->rasterizeValue());
$normalized_output = new FieldItemNormalizerValue([
$processed,
], new CacheableMetadata());
return $normalized_output;
}
public function denormalize($data, $class, $format = NULL, array $context = []) {
return $this->subject
->denormalize($data, $class, $format, $context);
}
public function setSerializer(SerializerInterface $serializer) {
parent::setSerializer($serializer);
$this->subject
->setSerializer($serializer);
}
}