MenuServiceProvider::boot()   A
last analyzed

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 Silex\Application;
8
use Silex\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(Application $app)
22
    {
23
        $app['knp_menu.factory'] = $app->share(function() use ($app) {
24
            $factory = new MenuFactory();
25
26
            if (isset($app['url_generator'])) {
27
                $factory->addExtension(new RoutingExtension($app['url_generator']));
28
            }
29
30
            return $factory;
31
        });
32
33
        $app['knp_menu.matcher'] = $app->share(function() use ($app) {
34
            $matcher = new Matcher();
35
36
            if (isset($app['knp_menu.voter.router'])) {
37
                $matcher->addVoter($app['knp_menu.voter.router']);
0 ignored issues
show
Deprecated Code introduced by
The function Knp\Menu\Matcher\Matcher::addVoter() has been deprecated: since 2.3. Pass voters in the constructor instead. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

37
                /** @scrutinizer ignore-deprecated */ $matcher->addVoter($app['knp_menu.voter.router']);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
38
            }
39
40
            if (isset($app['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
                $app['knp_menu.matcher.configure']($matcher);
43
            }
44
45
            return $matcher;
46
        });
47
48
        $app['knp_menu.voter.router'] = $app->share(function() use ($app) {
49
            return new RouteVoter($app['request_stack']);
50
        });
51
52
        $app['knp_menu.renderer.list'] = $app->share(function() use ($app) {
53
            return new ListRenderer($app['knp_menu.matcher'], array(), $app['charset']);
54
        });
55
56
        $app['knp_menu.menu_provider'] = $app->share(function() use ($app) {
57
            return new PimpleMenuProvider($app, $app['knp_menu.menus']);
58
        });
59
60
        if (!isset($app['knp_menu.menus'])) {
61
            $app['knp_menu.menus'] = array();
62
        }
63
64
        $app['knp_menu.renderer_provider'] = $app->share(function() use ($app) {
65
            $app['knp_menu.renderers'] = array_merge(
66
                array('list' => 'knp_menu.renderer.list'),
67
                isset($app['knp_menu.renderer.twig']) ? array('twig' => 'knp_menu.renderer.twig') : array(),
68
                isset($app['knp_menu.renderers']) ? $app['knp_menu.renderers'] : array()
69
            );
70
71
            return new PimpleRendererProvider($app, $app['knp_menu.default_renderer'], $app['knp_menu.renderers']);
72
        });
73
74
        $app['knp_menu.menu_manipulator'] = $app->share(function() use ($app) {
0 ignored issues
show
Unused Code introduced by
The import $app 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($app['knp_menu.default_renderer'])) {
79
            $app['knp_menu.default_renderer'] = 'list';
80
        }
81
82
        $app['knp_menu.helper'] = $app->share(function() use ($app) {
83
            return new Helper($app['knp_menu.renderer_provider'], $app['knp_menu.menu_provider'], $app['knp_menu.menu_manipulator'], $app['knp_menu.matcher']);
84
        });
85
86
        if (isset($app['twig'])) {
87
            $app['knp_menu.twig_extension'] = $app->share(function() use ($app) {
88
                return new MenuExtension($app['knp_menu.helper'], $app['knp_menu.matcher'], $app['knp_menu.menu_manipulator']);
89
            });
90
91
            $app['knp_menu.renderer.twig'] = $app->share(function() use ($app) {
92
                return new TwigRenderer($app['twig'], $app['knp_menu.template'], $app['knp_menu.matcher']);
93
            });
94
95
            if (!isset($app['knp_menu.template'])) {
96
                $app['knp_menu.template'] = 'knp_menu.html.twig';
97
            }
98
99
            $app['twig'] = $app->share($app->extend('twig', function(\Twig_Environment $twig) use ($app) {
100
                $twig->addExtension($app['knp_menu.twig_extension']);
101
102
                return $twig;
103
            }));
104
105
            $app['twig.loader.filesystem'] = $app->share($app->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
    public function boot(Application $app) {}
116
}
117