Passed
Push — master ( 53a258...7a685f )
by Alexander
04:06
created

Callback   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 17
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 6
c 1
b 0
f 0
dl 0
loc 17
rs 10
ccs 5
cts 5
cp 1
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A process() 0 3 1
A __construct() 0 4 1
1
<?php
2
namespace Yiisoft\Yii\Web\Middleware;
3
4
use Psr\Container\ContainerInterface;
5
use Psr\Http\Message\ServerRequestInterface;
6
use Psr\Http\Message\ResponseInterface;
7
use Psr\Http\Server\MiddlewareInterface;
8
use Psr\Http\Server\RequestHandlerInterface;
9
use Yiisoft\Injector\Injector;
10
11
/**
12
 * Callback wraps arbitrary PHP callback into object matching [[MiddlewareInterface]].
13
 * Usage example:
14
 *
15
 * ```php
16
 * $middleware = new CallbackMiddleware(function(ServerRequestInterface $request, RequestHandlerInterface $handler) {
17
 *     if ($request->getParams() === []) {
18
 *         return new Response();
19
 *     }
20
 *     return $handler->handle($request);
21
 * });
22
 * $response = $middleware->process(Yii::$app->getRequest(), $handler);
23
 * ```
24
 *
25
 * @see MiddlewareInterface
26
 */
27
final class Callback implements MiddlewareInterface
28
{
29
    /**
30
     * @var callable a PHP callback matching signature of [[MiddlewareInterface::process()]].
31
     */
32
    private $callback;
33
    private $container;
34
35 4
    public function __construct(callable $callback, ContainerInterface $container)
36
    {
37 4
        $this->callback = $callback;
38 4
        $this->container = $container;
39
    }
40
41 4
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
42
    {
43 4
        return (new Injector($this->container))->invoke($this->callback, [$request, $handler]);
44
    }
45
}
46