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
|
|||
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 |
This check looks for imports that have been defined, but are not used in the scope.