Passed
Pull Request — master (#2)
by Christophe
04:05 queued 02:04
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 Pimple\Container;
7
use Pimple\ServiceProviderInterface;
8
use Knp\Menu\Matcher\Matcher;
9
use Knp\Menu\MenuFactory;
10
use Knp\Menu\Renderer\ListRenderer;
11
use Knp\Menu\Renderer\TwigRenderer;
12
use Knp\Menu\Provider\ArrayAccessProvider as PimpleMenuProvider;
13
use Knp\Menu\Renderer\ArrayAccessProvider as PimpleRendererProvider;
14
use Knp\Menu\Twig\Helper;
15
use Knp\Menu\Twig\MenuExtension;
16
use Knp\Menu\Util\MenuManipulator;
17
18
class MenuServiceProvider implements ServiceProviderInterface
19
{
20
    public function register(Container $app)
21
    {
22
        $app['knp_menu.factory'] = function() use ($app) {
23
            $factory = new MenuFactory();
24
25
            if (isset($app['url_generator'])) {
26
                $factory->addExtension(new RoutingExtension($app['url_generator']));
27
            }
28
29
            return $factory;
30
        };
31
32
        $app['knp_menu.matcher'] = function() use ($app) {
33
            $matcher = new Matcher();
34
35
            if (isset($app['knp_menu.matcher.configure'])) {
36
                $app['knp_menu.matcher.configure']($matcher);
37
            }
38
39
            return $matcher;
40
        };
41
42
        $app['knp_menu.renderer.list'] = function() use ($app) {
43
            return new ListRenderer($app['knp_menu.matcher'], array(), $app['charset']);
44
        };
45
46
        $app['knp_menu.menu_provider'] = function() use ($app) {
47
            return new PimpleMenuProvider($app, $app['knp_menu.menus']);
48
        };
49
50
        if (!isset($app['knp_menu.menus'])) {
51
            $app['knp_menu.menus'] = array();
52
        }
53
54
        $app['knp_menu.renderer_provider'] = function() use ($app) {
55
            $app['knp_menu.renderers'] = array_merge(
56
                array('list' => 'knp_menu.renderer.list'),
57
                isset($app['knp_menu.renderer.twig']) ? array('twig' => 'knp_menu.renderer.twig') : array(),
58
                isset($app['knp_menu.renderers']) ? $app['knp_menu.renderers'] : array()
59
            );
60
61
            return new PimpleRendererProvider($app, $app['knp_menu.default_renderer'], $app['knp_menu.renderers']);
62
        };
63
64
        $app['knp_menu.menu_manipulator'] = 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...
65
            return new MenuManipulator();
66
        };
67
68
        $app['knp_menu.default_renderer'] = 'list';
69
70
        $app['knp_menu.helper'] = function() use ($app) {
71
            return new Helper($app['knp_menu.renderer_provider'], $app['knp_menu.menu_provider'], $app['knp_menu.menu_manipulator'], $app['knp_menu.matcher']);
72
        };
73
74
        if (isset($app['twig'])) {
75
            $app['knp_menu.twig_extension'] = function() use ($app) {
76
                return new MenuExtension($app['knp_menu.helper'], $app['knp_menu.matcher'], $app['knp_menu.menu_manipulator']);
77
            };
78
79
            $app['knp_menu.renderer.twig'] = function() use ($app) {
80
                return new TwigRenderer($app['twig'], $app['knp_menu.template'], $app['knp_menu.matcher']);
81
            };
82
83
            $app['knp_menu.template'] = 'knp_menu.html.twig';
84
85
            $app->extend('twig', function(\Twig_Environment $twig) use ($app) {
86
                $twig->addExtension($app['knp_menu.twig_extension']);
87
88
                return $twig;
89
            });
90
91
            $app->extend('twig.loader.filesystem', function(\Twig_Loader_Filesystem $loader) {
92
                $ref = new \ReflectionClass('Knp\Menu\ItemInterface');
93
94
                $loader->addPath(dirname($ref->getFileName()).'/Resources/views');
95
96
                return $loader;
97
            });
98
        }
99
    }
100
}
101