Completed
Pull Request — develop (#625)
by Narcotic
11:27 queued 06:45
created

ProxyCacheListener   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 85
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 5
c 1
b 0
f 0
lcom 1
cbo 4
dl 0
loc 85
ccs 0
cts 24
cp 0
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A setResponseTagger() 0 4 1
A setCacheManager() 0 4 1
A onKernelResponse() 0 20 3
1
<?php
2
/**
3
 * listener that invalidates a server cache in front of graviton, if so configured
4
 */
5
namespace Graviton\CacheBundle\Listener;
6
7
use FOS\HttpCacheBundle\CacheManager;
8
use FOS\HttpCacheBundle\Http\SymfonyResponseTagger;
9
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
10
11
/**
12
 * @author   List of contributors <https://github.com/libgraviton/graviton/graphs/contributors>
13
 * @license  http://opensource.org/licenses/gpl-license.php GNU Public License
14
 * @link     http://swisscom.ch
15
 */
16
class ProxyCacheListener
17
{
18
19
    /**
20
     * @var SymfonyResponseTagger
21
     */
22
    private $responseTagger;
23
24
    /**
25
     * @var CacheManager
26
     */
27
    private $cacheManager;
28
29
    /**
30
     * which methods should be tagged
31
     *
32
     * @var array
33
     */
34
    private $tagOnMethodes = [
35
        'GET',
36
        'OPTIONS',
37
        'HEAD'
38
    ];
39
40
    /**
41
     * tag that every item should receive
42
     *
43
     * @var array
44
     */
45
    private $baseTags = [
46
        'all'
47
    ];
48
49
    /**
50
     * set ResponseTagger
51
     *
52
     * @param SymfonyResponseTagger $responseTagger responseTagger
53
     *
54
     * @return void
55
     */
56
    public function setResponseTagger($responseTagger)
57
    {
58
        $this->responseTagger = $responseTagger;
59
    }
60
61
    /**
62
     * set CacheManager
63
     *
64
     * @param CacheManager $cacheManager cacheManager
65
     *
66
     * @return void
67
     */
68
    public function setCacheManager($cacheManager)
69
    {
70
        $this->cacheManager = $cacheManager;
71
    }
72
73
    /**
74
     * add a IfNoneMatch header to the response
75
     *
76
     * @param FilterResponseEvent $event response listener event
77
     *
78
     * @return void
79
     */
80
    public function onKernelResponse(FilterResponseEvent $event)
81
    {
82
83
        $routeName = $event->getRequest()->get('_route');
84
        $routeParts = explode('.', $routeName);
85
        $routeType = end($routeParts);
86
        array_pop($routeParts);
87
        $tags = [implode('.', $routeParts)];
88
89
        if (in_array($event->getRequest()->getMethod(), $this->tagOnMethodes)) {
90
            $this->responseTagger->addTags(array_merge($this->baseTags, $tags));
91
        } else {
92
            // if something is done within i18n, we delete everything
93
            if ($routeParts[1] == 'i18n') {
94
                $tags[] = 'all';
95
            }
96
97
            $this->cacheManager->invalidateTags($tags);
98
        }
99
    }
100
}
101