RouterView   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 101
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 9
eloc 24
c 2
b 0
f 0
dl 0
loc 101
ccs 29
cts 29
cp 1
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A getPageRoute() 0 5 1
A generate() 0 12 3
A getSortRoute() 0 5 1
A getRoute() 0 3 1
A getRequestName() 0 3 1
A getLengthRoute() 0 11 1
1
<?php
2
3
namespace Povs\ListerBundle\View;
4
5
use Povs\ListerBundle\Service\RequestHandler;
6
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
7
use Symfony\Component\Routing\RouterInterface;
8
9
/**
10
 * @author Povilas Margaiatis <[email protected]>
11
 */
12
class RouterView
13
{
14
    /**
15
     * @var RequestHandler
16
     */
17
    private $requestHandler;
18
19
    /**
20
     * @var RouterInterface
21
     */
22
    private $router;
23
24
    /**
25
     * @param RequestHandler  $requestHandler
26
     * @param RouterInterface $router
27
     */
28 6
    public function __construct(RequestHandler $requestHandler, RouterInterface $router)
29
    {
30 6
        $this->requestHandler = $requestHandler;
31 6
        $this->router = $router;
32
    }
33
34
    /**
35
     * @param int $page
36
     *
37
     * @return string
38
     */
39 1
    public function getPageRoute(int $page): string
40
    {
41 1
        $pageName = $this->requestHandler->getName('page');
42
43 1
        return $this->generate([$pageName => $page]);
44
    }
45
46
    /**
47
     * @param int $length
48
     *
49
     * @return string
50
     */
51 1
    public function getLengthRoute(int $length): string
52
    {
53 1
        $lengthName = $this->requestHandler->getName('length');
54 1
        $pageName = $this->requestHandler->getName('page');
55
56 1
        $params = [
57 1
            $lengthName => $length,
58 1
            $pageName => 1
59 1
        ];
60
61 1
        return $this->generate($params);
62
    }
63
64
    /**
65
     * @param string $field
66
     * @param string $direction
67
     *
68
     * @return string
69
     */
70 1
    public function getSortRoute(string $field, string $direction): string
71
    {
72 1
        $sortName = $this->requestHandler->getName('sort');
73
74 1
        return $this->generate([$sortName => [$field => $direction]]);
75
    }
76
77
    /**
78
     * @return string
79
     */
80 1
    public function getRoute(): string
81
    {
82 1
        return $this->generate([], false);
83
    }
84
85
    /**
86
     * @param string $name
87
     *
88
     * @return string|null
89
     */
90 1
    public function getRequestName(string $name): ?string
91
    {
92 1
        return $this->requestHandler->getName($name);
93
    }
94
95
    /**
96
     * @param array $params
97
     * @param bool  $merge
98
     *
99
     * @return string
100
     */
101 4
    public function generate(array $params, bool $merge = true): string
102
    {
103 4
        $request = $this->requestHandler->getRequest();
104
105 4
        if ($routeParams = $request->attributes->get('_route_params')) {
106 4
            $params = array_merge($params, $routeParams);
107
        }
108
109 4
        return $this->router->generate(
110 4
            $request->attributes->get('_route'),
111 4
            $merge ? array_merge($request->query->all(), $params) : $params,
112 4
            UrlGeneratorInterface::ABSOLUTE_URL
113 4
        );
114
    }
115
}
116