Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer::normalize PHP Метод

normalize() публичный Метод

public normalize ( $object, $format = null, array $context = [] )
$context array
    public function normalize($object, $format = null, array $context = array())
    {
        if (!isset($context['cache_key'])) {
            $context['cache_key'] = $this->getCacheKey($format, $context);
        }
        if ($this->isCircularReference($object, $context)) {
            return $this->handleCircularReference($object);
        }
        $data = array();
        $stack = array();
        $attributes = $this->getAttributes($object, $format, $context);
        $class = get_class($object);
        $attributesMetadata = $this->classMetadataFactory ? $this->classMetadataFactory->getMetadataFor($class)->getAttributesMetadata() : null;
        foreach ($attributes as $attribute) {
            if (null !== $attributesMetadata && $this->isMaxDepthReached($attributesMetadata, $class, $attribute, $context)) {
                continue;
            }
            $attributeValue = $this->getAttributeValue($object, $attribute, $format, $context);
            if (isset($this->callbacks[$attribute])) {
                $attributeValue = call_user_func($this->callbacks[$attribute], $attributeValue);
            }
            if (null !== $attributeValue && !is_scalar($attributeValue)) {
                $stack[$attribute] = $attributeValue;
            }
            $data = $this->updateData($data, $attribute, $attributeValue);
        }
        foreach ($stack as $attribute => $attributeValue) {
            if (!$this->serializer instanceof NormalizerInterface) {
                throw new LogicException(sprintf('Cannot normalize attribute "%s" because the injected serializer is not a normalizer', $attribute));
            }
            $data = $this->updateData($data, $attribute, $this->serializer->normalize($attributeValue, $format, $context));
        }
        return $data;
    }

Usage Example

Пример #1
0
 /**
  * {@inheritdoc}
  */
 public function normalize($object, $format = null, array $context = [])
 {
     $resourceClass = $this->resourceClassResolver->getResourceClass($object, $context['resource_class'] ?? null, true);
     $context = $this->initContext($resourceClass, $context);
     $context['api_normalize'] = true;
     return parent::normalize($object, $format, $context);
 }