You are here

final class Serializer in JSON:API 8

Same name and namespace in other branches
  1. 8.2 src/Serializer/Serializer.php \Drupal\jsonapi\Serializer\Serializer

Overrides the Symfony serializer to cordon off our incompatible normalizers.

This service is for *internal* use only. It is not suitable for *any* reuse. Backwards compatibility is in no way guaranteed and will almost certainly be broken in the future.

@link https://www.drupal.org/project/jsonapi/issues/2923779#comment-12407443

@internal

Hierarchy

  • class \Drupal\jsonapi\Serializer\Serializer extends \Symfony\Component\Serializer\Serializer

Expanded class hierarchy of Serializer

1 file declares its use of Serializer
EntityToJsonApi.php in src/EntityToJsonApi.php
1 string reference to 'Serializer'
jsonapi.services.yml in ./jsonapi.services.yml
jsonapi.services.yml
1 service uses Serializer
jsonapi.serializer_do_not_use_removal_imminent in ./jsonapi.services.yml
Drupal\jsonapi\Serializer\Serializer

File

src/Serializer/Serializer.php, line 19

Namespace

Drupal\jsonapi\Serializer
View source
final class Serializer extends SymfonySerializer {

  /**
   * A normalizer to fall back on when JSON API cannot normalize an object.
   *
   * @var \Symfony\Component\Serializer\Normalizer\NormalizerInterface|\Symfony\Component\Serializer\Normalizer\DenormalizerInterface
   */
  protected $fallbackNormalizer;

  /**
   * Adds a secondary normalizer.
   *
   * This normalizer will be attempted when JSON API has no applicable
   * normalizer.
   *
   * @param \Symfony\Component\Serializer\Normalizer\NormalizerInterface $normalizer
   *   The secondary normalizer.
   */
  public function setFallbackNormalizer(NormalizerInterface $normalizer) {
    $this->fallbackNormalizer = $normalizer;
  }

  /**
   * {@inheritdoc}
   */
  public function normalize($data, $format = NULL, array $context = []) {
    if ($this
      ->selfSupportsNormalization($data, $format)) {
      return parent::normalize($data, $format, $context);
    }
    if ($this->fallbackNormalizer
      ->supportsNormalization($data, $format)) {
      return $this->fallbackNormalizer
        ->normalize($data, $format, $context);
    }
    return parent::normalize($data, $format, $context);
  }

  /**
   * {@inheritdoc}
   */
  public function denormalize($data, $type, $format = NULL, array $context = []) {
    if ($this
      ->selfSupportsDenormalization($data, $type, $format)) {
      return parent::denormalize($data, $type, $format, $context);
    }
    return $this->fallbackNormalizer
      ->denormalize($data, $type, $format, $context);
  }

  /**
   * {@inheritdoc}
   */
  public function supportsNormalization($data, $format = NULL) {
    return $this
      ->selfSupportsNormalization($data, $format) || $this->fallbackNormalizer
      ->supportsNormalization($data, $format);
  }

  /**
   * Checks whether this class alone supports normalization.
   *
   * @param mixed $data
   *   Data to normalize.
   * @param string $format
   *   The format being (de-)serialized from or into.
   *
   * @return bool
   *   Whether this class supports normalization for the given data.
   */
  private function selfSupportsNormalization($data, $format = NULL) {
    return parent::supportsNormalization($data, $format);
  }

  /**
   * {@inheritdoc}
   */
  public function supportsDenormalization($data, $type, $format = NULL) {
    return $this
      ->selfSupportsDenormalization($data, $type, $format) || $this->fallbackNormalizer
      ->supportsDenormalization($data, $type, $format);
  }

  /**
   * Checks whether this class alone supports denormalization.
   *
   * @param mixed $data
   *   Data to denormalize from.
   * @param string $type
   *   The class to which the data should be denormalized.
   * @param string $format
   *   The format being deserialized from.
   *
   * @return bool
   *   Whether this class supports normalization for the given data and type.
   */
  private function selfSupportsDenormalization($data, $type, $format = NULL) {
    return parent::supportsDenormalization($data, $type, $format);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Serializer::$fallbackNormalizer protected property A normalizer to fall back on when JSON API cannot normalize an object.
Serializer::denormalize public function Denormalizes data back into an object of the given class.
Serializer::normalize public function Normalizes an object into a set of arrays/scalars.
Serializer::selfSupportsDenormalization private function Checks whether this class alone supports denormalization.
Serializer::selfSupportsNormalization private function Checks whether this class alone supports normalization.
Serializer::setFallbackNormalizer public function Adds a secondary normalizer.
Serializer::supportsDenormalization public function Checks whether the given class is supported for denormalization by this normalizer.
Serializer::supportsNormalization public function Checks whether the given class is supported for normalization by this normalizer.