RequestObjectExtension::load()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 2
1
<?php
2
3
namespace Fesor\RequestObject\Bundle\DependeyInjection;
4
5
use Fesor\RequestObject\Bundle\RequestObjectEventListener;
6
use Fesor\RequestObject\HttpPayloadResolver;
7
use Fesor\RequestObject\PayloadResolver;
8
use Fesor\RequestObject\RequestObjectBinder;
9
use Symfony\Component\DependencyInjection\ChildDefinition;
10
use Symfony\Component\DependencyInjection\ContainerBuilder;
11
use Symfony\Component\DependencyInjection\Definition;
12
use Symfony\Component\DependencyInjection\Extension\Extension;
13
use Symfony\Component\DependencyInjection\Reference;
14
15
class RequestObjectExtension extends Extension
16
{
17
    public function load(array $configs, ContainerBuilder $container)
18
    {
19
        $this->registerPayloadResolver($container);
20
        $this->registerRequestBinder($container);
21
        $this->registerEventListener($container);
22
    }
23
24
    private function registerPayloadResolver(ContainerBuilder $container)
25
    {
26
        $definition = new Definition(PayloadResolver::class);
27
        $definition->setAbstract(true);
28
        $container->setDefinition('request_object.payload_resolver', $definition);
29
30
        $implDefinition = new ChildDefinition('request_object.payload_resolver');
31
        $implDefinition->setClass(HttpPayloadResolver::class);
32
        $container->setDefinition('request_object.payload_resolver.http', $implDefinition);
33
34
        $container->setAlias(PayloadResolver::class, 'request_object.payload_resolver.http');
35
    }
36
37
    private function registerRequestBinder(ContainerBuilder $container)
38
    {
39
        $definition = new Definition(RequestObjectBinder::class, []);
40
        $definition->setAutowired(true);
41
        $definition->setPublic(false);
42
        $container->setDefinition('request_object.request_binder', $definition);
43
    }
44
45
    private function registerEventListener(ContainerBuilder $container)
46
    {
47
        $definition = new Definition(RequestObjectEventListener::class, [
48
            new Reference('request_object.request_binder'),
49
        ]);
50
        $definition->addTag('kernel.event_listener', array(
51
            'event' => 'kernel.controller',
52
            'method' => 'onKernelController',
53
        ));
54
55
        $container->setDefinition('request_object.event_listener.controller', $definition);
56
    }
57
}
58