BaseControllerListener::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 2
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Copyright (c) 2017
4
 *
5
 * @package   Majima
6
 * @author    David Neustadt <[email protected]>
7
 * @copyright 2017 David Neustadt
8
 * @license   MIT
9
 */
10
11
namespace Majima\EventListener;
12
13
use Majima\Services\DwooEngineFactory;
14
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
15
use Symfony\Component\DependencyInjection\Container;
16
use Symfony\Component\HttpFoundation\Response;
17
use Symfony\Component\HttpKernel\KernelEvents;
18
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
19
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
20
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
21
use Majima\MajimaController;
22
23
/**
24
 * Class BaseControllerListener
25
 * @package Majima\EventListener
26
 */
27
class BaseControllerListener implements EventSubscriberInterface
28
{
29
    /**
30
     * @var TokenStorageInterface
31
     */
32
    private $tokenStorage;
33
34
    /**
35
     * @var Container
36
     */
37
    private $container;
38
39
    /**
40
     * BaseControllerListener constructor.
41
     * @param TokenStorageInterface $tokenStorage
42
     * @param Container $container
43
     */
44
    public function __construct(TokenStorageInterface $tokenStorage, Container $container)
45
    {
46
        $this->tokenStorage = $tokenStorage;
47
        $this->container = $container;
48
    }
49
50
    /**
51
     * @param FilterControllerEvent $event
52
     */
53
    public function onKernelController(FilterControllerEvent $event)
54
    {
55
        /** @var Controller $controller */
56
        $controller = $event->getController();
57
        if ($this->isBaseController($controller)) {
58
            $controllerAction = explode(':', $event->getRequest()->attributes->get('_controller'));
59
            $response = call_user_func(
60
                [$controller[0], $controllerAction[1]],
61
                $event->getRequest()
62
            );
63
            if ($response instanceof Response) {
64
                return;
65
            }
66
            /** @var DwooEngineFactory $engine */
67
            $engine = $this->container->get('dwoo.engine');
68
            $tpl = ucfirst(str_replace('_', '/', $event->getRequest()->attributes->get('_route')));
69
            $event->setController(function() use ($engine, $tpl) {
70
                return $engine->render(
71
                    $tpl . '.tpl'
72
                );
73
            });
74
        }
75
    }
76
77
    /**
78
     * @param $controller
79
     * @return bool
80
     */
81
    protected function isBaseController($controller)
82
    {
83
        if (!is_array($controller)) {
84
            return false;
85
        }
86
87
        return $controller[0] instanceof MajimaController;
88
    }
89
90
    /**
91
     * @return array
92
     */
93
    public static function getSubscribedEvents()
94
    {
95
        return [
96
            KernelEvents::CONTROLLER => 'onKernelController',
97
        ];
98
    }
99
}