Issues (2)

src/MenuServiceProvider.php (1 issue)

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']);
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
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