hn-8.x-1.x-dev/src/Normalizer/TypedDataNormalizer.php

src/Normalizer/TypedDataNormalizer.php
<?php

namespace Drupal\hn\Normalizer;

use Drupal\Core\Field\FieldItemListInterface;
use Drupal\serialization\Normalizer\TypedDataNormalizer as SerializationTypedDataNormalizer;

/**
 * Normalizes TypedData.
 */
class TypedDataNormalizer extends SerializationTypedDataNormalizer {

  protected $format = ['hn'];

  /**
   * The normalizer used to normalize the typed data.
   *
   * @var \Symfony\Component\Serializer\Normalizer\NormalizerInterface
   */
  protected $serializer;

  protected $serializingParent = FALSE;

  /**
   * {@inheritdoc}
   */
  public function supportsNormalization($data, $format = NULL) {
    if ($this->serializingParent) {
      $this->serializingParent = FALSE;
      // Let parent handle it.
      return FALSE;
    }
    return parent::supportsNormalization($data, $format);
  }

  /**
   * {@inheritdoc}
   */
  public function normalize($object, $format = NULL, array $context = []) {

    /* @var $object \Drupal\Core\TypedData\TypedDataInterface */
    if (!$this->serializer) {
      $this->serializer = \Drupal::service('serializer');
    }

    $this->serializingParent = TRUE;
    $value = $this->serializer->normalize($object, $format, $context);
    $this->serializingParent = FALSE;

    // If this is a field with never more then 1 value, show the first value.
    if ($object instanceof FieldItemListInterface) {
      $cardinality = $object->getFieldDefinition()->getFieldStorageDefinition()->getCardinality();
      if ($cardinality === 1) {
        if (isset($value[0])) {
          $value = $value[0];
        }
        else {
          $value = NULL;
        }
      }
    }

    // If the value is an associative array with 'value' as only key,
    // return the value of 'value'.
    if (is_array($value) && isset($value['value']) && count($value) === 1) {
      $value = $value['value'];
    }

    return $value;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc