Completed
Push — feature/varnish ( 261794 )
by Narcotic
17:31
created

ProxyCacheListener   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 75
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 0%

Importance

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

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
 * Created by PhpStorm.
4
 * User: dn
5
 * Date: 24.11.17
6
 * Time: 16:37
7
 */
8
9
namespace Graviton\CacheBundle\Listener;
10
11
12
use FOS\HttpCacheBundle\CacheManager;
13
use FOS\HttpCacheBundle\Http\SymfonyResponseTagger;
14
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
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
    private $tagOnMethodes = [
30
        'GET',
31
        'OPTIONS',
32
        'HEAD'
33
    ];
34
35
    private $baseTags = [
36
        'all'
37
    ];
38
39
    /**
40
     * set ResponseTagger
41
     *
42
     * @param SymfonyResponseTagger $responseTagger responseTagger
43
     *
44
     * @return void
45
     */
46
    public function setResponseTagger($responseTagger)
47
    {
48
        $this->responseTagger = $responseTagger;
49
    }
50
51
    /**
52
     * set CacheManager
53
     *
54
     * @param CacheManager $cacheManager cacheManager
55
     *
56
     * @return void
57
     */
58
    public function setCacheManager($cacheManager)
59
    {
60
        $this->cacheManager = $cacheManager;
61
    }
62
63
    /**
64
     * add a IfNoneMatch header to the response
65
     *
66
     * @param FilterResponseEvent $event response listener event
67
     *
68
     * @return void
69
     */
70
    public function onKernelResponse(FilterResponseEvent $event)
71
    {
72
73
        $routeName = $event->getRequest()->get('_route');
74
        $routeParts = explode('.', $routeName);
75
        $routeType = end($routeParts);
76
        array_pop($routeParts);
77
        $tags = [implode('.', $routeParts)];
78
79
        if (in_array($event->getRequest()->getMethod(), $this->tagOnMethodes)) {
80
            $this->responseTagger->addTags(array_merge($this->baseTags, $tags));
81
        } else {
82
            // if something is done within i18n, we delete everything
83
            if ($routeParts[1] == 'i18n') {
84
                $tags[] = 'all';
85
            }
86
87
            $this->cacheManager->invalidateTags($tags);
88
        }
89
    }
90
}
91