Core: ServiceCircularReferenceException => Writing a Custom Normalizer

Created on 22 Jun 2017  路  7Comments  路  Source: api-platform/core

Hi:

I was trying to implement this example https://api-platform.com/docs/core/content-negotiation#writing-a-custom-normalizer but I'm getting a ServiceCircularReferenceException .

(1/1) ServiceCircularReferenceException Circular reference detected for service "AppBundle\Serializer\CustomItemNormalizer", path: "AppBundle\Serializer\CustomItemNormalizer -> serializer -> AppBundle\Serializer\CustomItemNormalizer". in CheckCircularReferencesPass.php (line 69) at CheckCircularReferencesPass->checkOutEdges(array(object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge))) in CheckCircularReferencesPass.php (line 72) at CheckCircularReferencesPass->checkOutEdges(array(object(ServiceReferenceGraphEdge))) in CheckCircularReferencesPass.php (line 72) at CheckCircularReferencesPass->checkOutEdges(array(object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge), object(ServiceReferenceGraphEdge))) in CheckCircularReferencesPass.php (line 72) at CheckCircularReferencesPass->checkOutEdges(array(object(ServiceReferenceGraphEdge))) in CheckCircularReferencesPass.php (line 45) at CheckCircularReferencesPass->process(object(ContainerBuilder)) in Compiler.php (line 143) at Compiler->compile(object(ContainerBuilder)) in ContainerBuilder.php (line 731) at ContainerBuilder->compile() in Kernel.php (line 560) at Kernel->initializeContainer() in Kernel.php (line 119) at Kernel->boot() in Kernel.php (line 168) at Kernel->handle(object(Request)) in app_dev.php (line 34)

Please help to fix this problem.

Thanks

Most helpful comment

@GonZOO82 My bad!! I didn't save the file properly. Your code it's working

All 7 comments

Did you solve this? I have the same exact problem.

use ApiPlatform\Core\Serializer\ItemNormalizer;
...
...
    public function __construct(ItemNormalizer $normalizer)
    {
        $this->normalizer = $normalizer;
    }

@GonZOO82 thanks

I'm also having this issue and the code provided by @GonZOO82 din't work for me.

[Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException]
Circular reference detected for service "AppBundle\Serializer\CustomItemNormalizer", path: "AppBundle\Serializer\CustomItemNormalizer -> serializer -> AppBundle\Serializer\CustomItemNormalizer".

@mcanepa this is my code

<?php

namespace AppBundle\Serializer;

use ApiPlatform\Core\Serializer\ItemNormalizer;
use Podium\AdminBundle\Model\Seo;
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;

class CustomItemNormalizer implements NormalizerInterface, DenormalizerInterface
{
    private $normalizer;

    public function __construct(ItemNormalizer $normalizer)
    {
        $this->normalizer = $normalizer;
    }

    public function denormalize($data, $class, $format = null, array $context = [])
    {

#....

        return $this->normalizer->denormalize($data, $class, $format, $context);
    }

    public function supportsDenormalization($data, $type, $format = null)
    {
        return $this->normalizer->supportsDenormalization($data, $type, $format);
    }

    public function normalize($object, $format = null, array $context = [])
    {
        return $this->normalizer->normalize($object, $format, $context);
    }

    public function supportsNormalization($data, $format = null)
    {
        return $this->normalizer->supportsNormalization($data, $format);
    }
}
    app.custom_item_normalizer:
        public: false
        class: AppBundle\Serializer\CustomItemNormalizer
        arguments: [ '@api_platform.serializer.normalizer.item' ]
        tags: [ { name: serializer.normalizer } ]

@GonZOO82 My bad!! I didn't save the file properly. Your code it's working

Thanks @GonZOO82

Was this page helpful?
0 / 5 - 0 ratings