Issues (5)

src/RoadRunnerHttpWorker.php (1 issue)

Labels
Severity
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Yii\Runner\RoadRunner;
6
7
use Psr\Container\ContainerInterface;
8
use Psr\Http\Message\ResponseFactoryInterface;
9
use Psr\Http\Message\ResponseInterface;
10
use Psr\Http\Message\ServerRequestFactoryInterface;
11
use Psr\Http\Message\ServerRequestInterface;
12
use Psr\Http\Message\StreamFactoryInterface;
13
use Psr\Http\Message\UploadedFileFactoryInterface;
14
use Spiral\RoadRunner\Http\PSR7Worker;
15
use Spiral\RoadRunner\Http\PSR7WorkerInterface;
16
use Spiral\RoadRunner\Worker;
17
use Throwable;
18
use Yiisoft\ErrorHandler\ErrorHandler;
0 ignored issues
show
The type Yiisoft\ErrorHandler\ErrorHandler was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
19
use Yiisoft\ErrorHandler\Middleware\ErrorCatcher;
20
use Yiisoft\Http\Status;
21
use Yiisoft\Yii\Http\Handler\ThrowableHandler;
22
23
use function microtime;
24
25
/**
26
 * @internal
27
 */
28
final class RoadRunnerHttpWorker
29
{
30
    private ResponseFactoryInterface $responseFactory;
31
    private PSR7WorkerInterface $worker;
32
    private ErrorCatcher $errorCatcher;
33
    private ErrorHandler $errorHandler;
34
35 13
    public function __construct(ContainerInterface $container, PSR7WorkerInterface $worker = null)
36
    {
37
        /** @psalm-var ResponseFactoryInterface $this->responseFactory */
38 13
        $this->responseFactory = $container->get(ResponseFactoryInterface::class);
39
        /** @psalm-var ErrorCatcher $this->errorCatcher */
40 13
        $this->errorCatcher = $container->get(ErrorCatcher::class);
41
        /** @psalm-var ErrorHandler $this->errorHandler */
42 13
        $this->errorHandler = $container->get(ErrorHandler::class);
43
        /** @psalm-suppress MixedArgument */
44 13
        $this->worker = $worker ?? new PSR7Worker(
45 13
            Worker::create(),
46 13
            $container->get(ServerRequestFactoryInterface::class),
47 13
            $container->get(StreamFactoryInterface::class),
48 13
            $container->get(UploadedFileFactoryInterface::class),
49 13
        );
50
    }
51
52 9
    public function respond(ResponseInterface $response): void
53
    {
54 9
        $this->worker->respond($response);
55
    }
56
57 4
    public function respondWithError(Throwable $throwable, ServerRequestInterface $request = null): ResponseInterface
58
    {
59 4
        if ($request === null) {
60 2
            $errorData = $this->errorHandler->handle($throwable);
61 2
            $response = $errorData->addToResponse($this->responseFactory->createResponse(Status::BAD_REQUEST));
62
        } else {
63 2
            $response = $this->errorCatcher->process($request, new ThrowableHandler($throwable));
64
        }
65
66 4
        $this->respond($response);
67 4
        return $response;
68
    }
69
70 10
    public function waitRequest(): ServerRequestInterface|Throwable|null
71
    {
72
        try {
73 10
            return $this->worker->waitRequest()?->withAttribute('applicationStartTime', microtime(true));
74 2
        } catch (Throwable $t) {
75 2
            return $t;
76
        }
77
    }
78
}
79