Completed
Push — master ( 5bbb37...1fd4a9 )
by Alexander
02:22
created

Callback::__set_state()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
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
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
    public function __construct(callable $callback, ContainerInterface $container)
36
    {
37
        $this->callback = $callback;
38
        $this->container = $container;
39
    }
40
41
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
42
    {
43
        return (new Injector($this->container))->invoke($this->callback, [$request, $handler]);
44
    }
45
}
46