MenuBuilder   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 68
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 0
Metric Value
wmc 3
lcom 1
cbo 6
dl 0
loc 68
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 13 1
A createMainMenu() 0 16 2
1
<?php
2
3
namespace Harentius\BlogBundle\Menu;
4
5
use Harentius\BlogBundle\Entity\PageRepository;
6
use Harentius\BlogBundle\Router\PublicationUrlGenerator;
7
use Knp\Menu\FactoryInterface;
8
use Knp\Menu\ItemInterface;
9
use Symfony\Component\HttpFoundation\RequestStack;
10
11
class MenuBuilder
12
{
13
    /**
14
     * @var FactoryInterface
15
     */
16
    private $factory;
17
18
    /**
19
     * @var PageRepository
20
     */
21
    private $pageRepository;
22
23
    /**
24
     * @var string|null
25
     */
26
    private $homepageSlug;
27
28
    /**
29
     * @var PublicationUrlGenerator
30
     */
31
    private $publicationUrlGenerator;
32
33
    /**
34
     * @var RequestStack
35
     */
36
    private $requestStack;
37
38
    /**
39
     * @param FactoryInterface $factory
40
     * @param PageRepository $pageRepository
41
     * @param PublicationUrlGenerator $publicationUrlGenerator
42
     * @param RequestStack $requestStack
43
     * @param string|null $homepageSlug
44
     */
45
    public function __construct(
46
        FactoryInterface $factory,
47
        PageRepository $pageRepository,
48
        PublicationUrlGenerator $publicationUrlGenerator,
49
        RequestStack $requestStack,
50
        ?string $homepageSlug
51
    ) {
52
        $this->factory = $factory;
53
        $this->publicationUrlGenerator = $publicationUrlGenerator;
54
        $this->pageRepository = $pageRepository;
55
        $this->requestStack = $requestStack;
56
        $this->homepageSlug = $homepageSlug;
57
    }
58
59
    /**
60
     * @return ItemInterface
61
     */
62
    public function createMainMenu(): ItemInterface
63
    {
64
        $menu = $this->factory->createItem('root');
65
66
        $menu->setChildrenAttribute('class', 'navbar-nav');
67
        $pages = $this->pageRepository->findForMainMenu($this->homepageSlug);
68
        $locale = $this->requestStack->getCurrentRequest()->getLocale();
69
70
        foreach ($pages as $page) {
71
            $menu->addChild($page->getTitle(), [
72
                'uri' => $this->publicationUrlGenerator->generateUrl($page, $locale),
73
            ]);
74
        }
75
76
        return $menu;
77
    }
78
}
79