for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace ScayTrase\Api\Cruds\DependencyInjection\Compiler;
use ScayTrase\Api\Cruds\Adaptors\Symfony\CircularReferenceHandler;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\DefinitionDecorator;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\Serializer\SerializerInterface;
final class SymfonySerializerCompilerPass implements CompilerPassInterface
{
/** {@inheritdoc} */
public function process(ContainerBuilder $container)
if (!$container->has('serializer') || $container->hasAlias('serializer')) {
return;
}
$class = $container->getDefinition('serializer')->getClass();
if (!in_array(SerializerInterface::class, class_implements($class), true)) {
$handler = new Definition(CircularReferenceHandler::class);
$handler->setArguments([new Reference('doctrine')]);
$normalizer = new DefinitionDecorator('serializer.normalizer.object');
$normalizer->addTag('serializer.normalizer', ['priority' => -100]);
$normalizer->addMethodCall('setCircularReferenceHandler', [[$handler, 'handle']]);
$container->setDefinition('cruds.object_normalizer', $normalizer);