Completed
Push — master ( b5f5e6...030fe7 )
by Mr
03:56
created

Route::setRegexp()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 1
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace DrMVC\Router;
4
5
use Psr\Http\Message\ServerRequestInterface;
6
use Psr\Http\Message\ResponseInterface;
7
8
/**
9
 * Class Route
10
 * @package DrMVC\Router
11
 * @since 3.0
12
 */
13
class Route implements RouteInterface
14
{
15
    /**
16
     * @var array
17
     */
18
    private $_variables = [];
19
20
    /**
21
     * @var string
22
     */
23
    private $_regexp;
24
25
    /**
26
     * @var mixed
27
     */
28
    private $_callback;
29
30
    /**
31
     * @var ServerRequestInterface
32
     */
33
    private $_request;
0 ignored issues
show
introduced by
The private property $_request is not used, and could be removed.
Loading history...
34
35
    /**
36
     * @var ResponseInterface
37
     */
38
    private $_response;
0 ignored issues
show
introduced by
The private property $_response is not used, and could be removed.
Loading history...
39
40
    /**
41
     * @var array
42
     */
43
    private $_methods = [];
44
45
    /**
46
     * Route constructor.
47
     *
48
     * @param   array $methods Method of received query
49
     * @param   string $regexp Regular expression
50
     * @param   callable|string $callable Class name or callback
51
     */
52
    public function __construct(array $methods, string $regexp, $callable)
53
    {
54
        $this->setRoute($methods, $regexp, $callable);
55
    }
56
57
    /**
58
     * Set current method of object
59
     *
60
     * @param   array $methods
61
     * @return  RouteInterface
62
     */
63
    public function setMethods(array $methods): RouteInterface
64
    {
65
        $this->_methods = $methods;
66
        return $this;
67
    }
68
69
    /**
70
     * Get method of current object
71
     *
72
     * @return array
73
     */
74
    public function getMethods(): array
75
    {
76
        return $this->_methods;
77
    }
78
79
    /**
80
     * Check if method is in set
81
     *
82
     * @param   string $method
83
     * @return  bool
84
     */
85
    public function checkMethod(string $method): bool
86
    {
87
        return \in_array($method, $this->getMethods(), false);
88
    }
89
90
    /**
91
     * Set variables of current class
92
     *
93
     * @param   array $variables
94
     * @return  RouteInterface
95
     */
96
    public function setVariables(array $variables): RouteInterface
97
    {
98
        $this->_variables = $variables;
99
        return $this;
100
    }
101
102
    /**
103
     * Return array of available variables
104
     *
105
     * @return  array
106
     */
107
    public function getVariables(): array
108
    {
109
        return $this->_variables;
110
    }
111
112
    /**
113
     * Set single route
114
     *
115
     * @param   array $methods Method of received query
116
     * @param   string $regexp Regular expression
117
     * @param   callable|string $callable Class name or callback
118
     * @return  RouteInterface
119
     */
120
    public function setRoute(
121
        array $methods,
122
        string $regexp,
123
        $callable
124
    ): RouteInterface {
125
        return $this
126
            ->setMethods($methods)
127
            ->setRegexp($regexp)
128
            ->setCallback($callable);
129
    }
130
131
    /**
132
     * Set callable element or class
133
     *
134
     * @param   mixed $callback
135
     * @return  RouteInterface
136
     */
137
    public function setCallback($callback): RouteInterface
138
    {
139
        $this->_callback = $callback;
140
        return $this;
141
    }
142
143
    /**
144
     * Return callable element
145
     *
146
     * @return  callable|string
147
     */
148
    public function getCallback()
149
    {
150
        return $this->_callback;
151
    }
152
153
    /**
154
     * Set regexp of current route
155
     *
156
     * @param   string $regexp
157
     * @return  RouteInterface
158
     */
159
    public function setRegexp(string $regexp): RouteInterface
160
    {
161
        $pattern = ['/</', '/>/'];
162
        $replace = ['(?P<', '>.+)'];
163
        $regexp = preg_replace($pattern, $replace, $regexp);
164
        $this->_regexp = '#^' . $regexp . '$#u';
165
        return $this;
166
    }
167
168
    /**
169
     * Return regexp of current route
170
     *
171
     * @return  string
172
     */
173
    public function getRegexp(): string
174
    {
175
        return $this->_regexp;
176
    }
177
178
}
179