Skip to content

Commit 07a4a76

Browse files
committed
👽 Support ecodev/graphql-upload v8
1 parent fb644ed commit 07a4a76

File tree

3 files changed

+58
-18
lines changed

3 files changed

+58
-18
lines changed

src/Controller/GraphQLiteController.php

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@
77
use Laminas\Diactoros\ServerRequestFactory;
88
use Laminas\Diactoros\StreamFactory;
99
use Laminas\Diactoros\UploadedFileFactory;
10+
use Psr\Http\Message\ResponseInterface;
11+
use Psr\Http\Server\RequestHandlerInterface;
12+
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;
1013
use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory;
14+
use TheCodingMachine\GraphQLite\Bundle\UploadMiddlewareUtils\DummyResponseWithRequest;
15+
use TheCodingMachine\GraphQLite\Bundle\UploadMiddlewareUtils\RequestExtractorMiddleware;
1116
use TheCodingMachine\GraphQLite\Http\HttpCodeDecider;
1217
use TheCodingMachine\GraphQLite\Http\HttpCodeDeciderInterface;
1318
use GraphQL\Executor\ExecutionResult;
@@ -30,24 +35,14 @@
3035
use function json_decode;
3136

3237
/**
33-
* Listens to every single request and forward Graphql requests to Graphql Webonix standardServer.
38+
* Listens to every single request and forwards GraphQL requests to Webonyx's \GraphQL\Server\StandardServer.
3439
*/
3540
class GraphQLiteController
3641
{
37-
/**
38-
* @var HttpMessageFactoryInterface
39-
*/
40-
private $httpMessageFactory;
41-
/** @var int */
42-
private $debug;
43-
/**
44-
* @var ServerConfig
45-
*/
46-
private $serverConfig;
47-
/**
48-
* @var HttpCodeDeciderInterface
49-
*/
50-
private $httpCodeDecider;
42+
private HttpMessageFactoryInterface $httpMessageFactory;
43+
private int $debug;
44+
private ServerConfig $serverConfig;
45+
private HttpCodeDeciderInterface $httpCodeDecider;
5146

5247
public function __construct(ServerConfig $serverConfig, ?HttpMessageFactoryInterface $httpMessageFactory = null, ?int $debug = null, ?HttpCodeDeciderInterface $httpCodeDecider = null)
5348
{
@@ -98,11 +93,12 @@ public function handleRequest(Request $request): Response
9893
$psr7Request = $psr7Request->withParsedBody($parsedBody);
9994
}
10095

101-
// Let's parse the request and adapt it for file uploads.
96+
// Let's parse the request and adapt it for file uploads using an anonymous PSR-15 middleware.
10297
if (class_exists(UploadMiddleware::class)) {
10398
$uploadMiddleware = new UploadMiddleware();
104-
$psr7Request = $uploadMiddleware->processRequest($psr7Request);
105-
\assert($psr7Request instanceof ServerRequestInterface);
99+
$dummyResponseWithRequest = $uploadMiddleware->process($psr7Request, new RequestExtractorMiddleware());
100+
assert($dummyResponseWithRequest instanceof DummyResponseWithRequest);
101+
$psr7Request = $dummyResponseWithRequest->getRequest();
106102
}
107103

108104
return $this->handlePsr7Request($psr7Request, $request);
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace TheCodingMachine\GraphQLite\Bundle\UploadMiddlewareUtils;
4+
5+
use Laminas\Diactoros\Response;
6+
use Psr\Http\Message\ServerRequestInterface;
7+
8+
/**
9+
* Class used to allow extraction of request from PSR-15 middleware
10+
*/
11+
class DummyResponseWithRequest extends Response
12+
{
13+
private ServerRequestInterface $request;
14+
15+
public function __construct(ServerRequestInterface $request)
16+
{
17+
parent::__construct();
18+
$this->request = $request;
19+
}
20+
21+
public function getRequest(): ServerRequestInterface
22+
{
23+
return $this->request;
24+
}
25+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace TheCodingMachine\GraphQLite\Bundle\UploadMiddlewareUtils;
4+
5+
use Psr\Http\Message\ResponseInterface;
6+
use Psr\Http\Message\ServerRequestInterface;
7+
use Psr\Http\Server\RequestHandlerInterface;
8+
9+
/**
10+
* Middleware to extract the request from the middleware chain
11+
*/
12+
class RequestExtractorMiddleware implements RequestHandlerInterface
13+
{
14+
public function handle(ServerRequestInterface $request): ResponseInterface
15+
{
16+
return new DummyResponseWithRequest($request);
17+
}
18+
19+
}

0 commit comments

Comments
 (0)