RequestObjectExtension   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 5
dl 0
loc 43
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A load() 0 6 1
A registerPayloadResolver() 0 12 1
A registerRequestBinder() 0 7 1
A registerEventListener() 0 12 1
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