Passed
Pull Request — master (#5)
by
unknown
01:48
created

MenuServiceProvider::boot()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 1
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 0
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 1
rs 10
1
<?php
2
3
namespace Knp\Menu\Silex;
4
5
use Knp\Menu\Integration\Symfony\RoutingExtension;
6
use Knp\Menu\Matcher\Voter\RouteVoter;
7
use Pimple\Container;
8
use Pimple\ServiceProviderInterface;
9
use Knp\Menu\Matcher\Matcher;
10
use Knp\Menu\MenuFactory;
11
use Knp\Menu\Renderer\ListRenderer;
12
use Knp\Menu\Renderer\TwigRenderer;
13
use Knp\Menu\Provider\ArrayAccessProvider as PimpleMenuProvider;
14
use Knp\Menu\Renderer\ArrayAccessProvider as PimpleRendererProvider;
15
use Knp\Menu\Twig\Helper;
16
use Knp\Menu\Twig\MenuExtension;
17
use Knp\Menu\Util\MenuManipulator;
18
19
class MenuServiceProvider implements ServiceProviderInterface
20
{
21
    public function register(Container $pimple)
22
    {
23
        $pimple['knp_menu.factory'] = function() use ($pimple) {
24
            $factory = new MenuFactory();
25
26
            if (isset($pimple['url_generator'])) {
27
                $factory->addExtension(new RoutingExtension($pimple['url_generator']));
28
            }
29
30
            return $factory;
31
        };
32
33
        $pimple['knp_menu.matcher'] = function() use ($pimple) {
34
            $matcher = new Matcher();
35
36
            if (isset($pimple['knp_menu.voter.router'])) {
37
                $matcher->addVoter($pimple['knp_menu.voter.router']);
38
            }
39
40
            if (isset($pimple['knp_menu.matcher.configure'])) {
41
                @trigger_error('Defining a "knp_menu.matcher.configure" to configure the matcher is deprecated since 1.1 and won\'t be supported in 2.0. Extend the "knp_menu.matcher" service instead.', E_USER_DEPRECATED);
42
                $pimple['knp_menu.matcher.configure']($matcher);
43
            }
44
45
            return $matcher;
46
        };
47
48
        $pimple['knp_menu.voter.router'] = function() use ($pimple) {
49
            return new RouteVoter($pimple['request_stack']);
50
        };
51
52
        $pimple['knp_menu.renderer.list'] = function() use ($pimple) {
53
            return new ListRenderer($pimple['knp_menu.matcher'], array(), $pimple['charset']);
54
        };
55
56
        $pimple['knp_menu.menu_provider'] = function() use ($pimple) {
57
            return new PimpleMenuProvider($pimple, $pimple['knp_menu.menus']);
58
        };
59
60
        if (!isset($pimple['knp_menu.menus'])) {
61
            $pimple['knp_menu.menus'] = array();
62
        }
63
64
        $pimple['knp_menu.renderer_provider'] = function() use ($pimple) {
65
            $pimple['knp_menu.renderers'] = array_merge(
66
                array('list' => 'knp_menu.renderer.list'),
67
                isset($pimple['knp_menu.renderer.twig']) ? array('twig' => 'knp_menu.renderer.twig') : array(),
68
                isset($pimple['knp_menu.renderers']) ? $pimple['knp_menu.renderers'] : array()
69
            );
70
71
            return new PimpleRendererProvider($pimple, $pimple['knp_menu.default_renderer'], $pimple['knp_menu.renderers']);
72
        };
73
74
        $pimple['knp_menu.menu_manipulator'] = function() use ($pimple) {
0 ignored issues
show
Unused Code introduced by
The import $pimple is not used and could be removed.

This check looks for imports that have been defined, but are not used in the scope.

Loading history...
75
            return new MenuManipulator();
76
        };
77
78
        if (!isset($pimple['knp_menu.default_renderer'])) {
79
            $pimple['knp_menu.default_renderer'] = 'list';
80
        }
81
82
        $pimple['knp_menu.helper'] = function() use ($pimple) {
83
            return new Helper($pimple['knp_menu.renderer_provider'], $pimple['knp_menu.menu_provider'], $pimple['knp_menu.menu_manipulator'], $pimple['knp_menu.matcher']);
84
        };
85
86
        if (isset($pimple['twig'])) {
87
            $pimple['knp_menu.twig_extension'] = function() use ($pimple) {
88
                return new MenuExtension($pimple['knp_menu.helper'], $pimple['knp_menu.matcher'], $pimple['knp_menu.menu_manipulator']);
89
            };
90
91
            $pimple['knp_menu.renderer.twig'] = function() use ($pimple) {
92
                return new TwigRenderer($pimple['twig'], $pimple['knp_menu.template'], $pimple['knp_menu.matcher']);
93
            };
94
95
            if (!isset($pimple['knp_menu.template'])) {
96
                $pimple['knp_menu.template'] = 'knp_menu.html.twig';
97
            }
98
99
            $pimple['twig'] = $pimple->extend('twig', function(\Twig_Environment $twig) use ($pimple) {
100
                $twig->addExtension($pimple['knp_menu.twig_extension']);
101
102
                return $twig;
103
            });
104
105
            $pimple['twig.loader.filesystem'] = $pimple->extend('twig.loader.filesystem', function(\Twig_Loader_Filesystem $loader) {
106
                $ref = new \ReflectionClass('Knp\Menu\ItemInterface');
107
108
                $loader->addPath(dirname($ref->getFileName()).'/Resources/views');
109
110
                return $loader;
111
            });
112
        }
113
    }
114
}
115