MenuServiceProvider::register()   C
last analyzed

Complexity

Conditions 10
Paths 12

Size

Total Lines 90
Code Lines 47

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 10
eloc 47
c 3
b 0
f 0
nc 12
nop 1
dl 0
loc 90
rs 5.1578

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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