Route::setMiddleware()   A
last analyzed

Complexity

Conditions 3
Paths 2

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 12
ccs 0
cts 11
cp 0
rs 9.4285
cc 3
eloc 7
nc 2
nop 1
crap 12
1
<?php
2
3
namespace Albert221\Blog\Route;
4
5
use InvalidArgumentException;
6
use League\Route\Route as LeagueRoute;
7
use Psr\Http\Message\ResponseInterface;
8
use Psr\Http\Message\ServerRequestInterface;
9
10
class Route extends LeagueRoute
11
{
12
    /**
13
     * @var callable
14
     */
15
    protected $middleware;
16
17
    /**
18
     * @param callable $middleware
19
     * @return $this
20
     */
21
    public function setMiddleware($middleware)
22
    {
23
        if (!is_callable($middleware)) {
24
            throw new InvalidArgumentException(sprintf(
25
                'Second parameter must be a callable, %s given.',
26
                is_scalar($middleware) ? gettype($middleware) : get_class($middleware)
27
            ));
28
        }
29
        $this->middleware = $middleware;
30
31
        return $this;
32
    }
33
34
    /**
35
     * {@inheritdoc}
36
     */
37
    public function dispatch(ServerRequestInterface $request, ResponseInterface $response, array $vars)
38
    {
39
        $response = parent::dispatch($request, $response, $vars);
40
        
41
        if (is_null($this->middleware)) {
42
            return $response;
43
        }
44
        
45
        return call_user_func_array($this->middleware, [$request, $response]);
46
    }
47
}
48