Completed
Push — master ( 589f5d...2e0cd6 )
by Pavel
07:02
created

DoctrineOrmCompilerPass::process()   B

Complexity

Conditions 3
Paths 3

Size

Total Lines 28
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 28
rs 8.8571
cc 3
eloc 17
nc 3
nop 1
1
<?php
2
3
namespace ScayTrase\Api\Cruds\DependencyInjection\Compiler;
4
5
use ScayTrase\Api\Cruds\Adaptors\DoctrineOrm\CircularReferenceHandler;
6
use ScayTrase\Api\Cruds\Adaptors\DoctrineOrm\DoctrineObjectNormalizer;
7
use Symfony\Component\Config\FileLocator;
8
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
9
use Symfony\Component\DependencyInjection\ContainerBuilder;
10
use Symfony\Component\DependencyInjection\Definition;
11
use Symfony\Component\DependencyInjection\DefinitionDecorator;
12
use Symfony\Component\DependencyInjection\Loader;
13
use Symfony\Component\DependencyInjection\Reference;
14
15
class DoctrineOrmCompilerPass implements CompilerPassInterface
16
{
17
    /** {@inheritdoc} */
18
    public function process(ContainerBuilder $container)
19
    {
20
        if (!$container->has('doctrine')) {
21
            return;
22
        }
23
24
        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../../Resources/config'));
25
        $loader->load('doctrine.yml');
26
27
        $factory = $container->getDefinition('cruds.factory.reflection');
28
        $factory->setFactory([new Reference('cruds.factory.doctrine_reflection_factory'), 'create']);
29
30
        if ($container->has('serializer.normalizer.object')) {
31
32
            $handler = new Definition(CircularReferenceHandler::class);
33
            $handler->setArguments([new Reference('doctrine')]);
34
35
            $container->getDefinition('serializer.normalizer.object')
36
                      ->addMethodCall('setCircularReferenceHandler', [[$handler, 'handle']]);
37
38
            $normalizer = new DefinitionDecorator('serializer.normalizer.object');
39
            $normalizer->setClass(DoctrineObjectNormalizer::class);
40
            $normalizer->addMethodCall('setRegistry', [new Reference('doctrine')]);
41
            $normalizer->addTag('serializer.normalizer', ['priority' => -800]);
42
43
            $container->setDefinition('cruds.serializer.doctrine_object_normalizer', $normalizer);
44
        }
45
    }
46
}
47