Skip to content

Commit 39ba960

Browse files
authored
Optimized code that you can get request from BadRequestHttpException. (#6247)
1 parent 1024754 commit 39ba960

File tree

3 files changed

+27
-14
lines changed

3 files changed

+27
-14
lines changed

src/Exception/BadRequestHttpException.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,24 @@
1111
*/
1212
namespace Hyperf\HttpMessage\Exception;
1313

14+
use Psr\Http\Message\ServerRequestInterface;
1415
use Throwable;
1516

1617
class BadRequestHttpException extends HttpException
1718
{
18-
public function __construct($message = null, $code = 0, Throwable $previous = null)
19+
public function __construct($message = null, $code = 0, Throwable $previous = null, protected ?ServerRequestInterface $request = null)
1920
{
2021
parent::__construct(400, $message, $code, $previous);
2122
}
23+
24+
public function setRequest(?ServerRequestInterface $request): static
25+
{
26+
$this->request = $request;
27+
return $this;
28+
}
29+
30+
public function getRequest(): ?ServerRequestInterface
31+
{
32+
return $this->request;
33+
}
2234
}

src/Server/Request.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
use Hyperf\HttpMessage\Upload\UploadedFile;
1919
use Hyperf\HttpMessage\Uri\Uri;
2020
use InvalidArgumentException;
21-
use Psr\Http\Message\RequestInterface;
2221
use Psr\Http\Message\ServerRequestInterface;
2322
use Psr\Http\Message\UploadedFileInterface;
2423
use Psr\Http\Message\UriInterface;
@@ -464,7 +463,7 @@ public function unsetAttribute(string $name): static
464463
return $this;
465464
}
466465

467-
protected static function normalizeParsedBody(array $data = [], ?RequestInterface $request = null): array
466+
protected static function normalizeParsedBody(array $data = [], ?ServerRequestInterface $request = null): array
468467
{
469468
if (! $request) {
470469
return $data;
@@ -484,7 +483,9 @@ protected static function normalizeParsedBody(array $data = [], ?RequestInterfac
484483
$data = $parser->parse($content, $contentType);
485484
}
486485
} catch (InvalidArgumentException $exception) {
487-
throw new BadRequestHttpException($exception->getMessage());
486+
throw new BadRequestHttpException($exception->getMessage(), request: $request);
487+
} catch (BadRequestHttpException $exception) {
488+
throw $exception->setRequest($request);
488489
}
489490

490491
return $data;

tests/ServerRequestTest.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
use PHPUnit\Framework\Attributes\CoversNothing;
2828
use PHPUnit\Framework\TestCase;
2929
use Psr\Container\ContainerInterface;
30-
use Psr\Http\Message\RequestInterface;
30+
use Psr\Http\Message\ServerRequestInterface;
3131
use ReflectionClass;
3232
use Swoole\Http\Request as SwooleRequest;
3333

@@ -55,19 +55,19 @@ public function testNormalizeParsedBody()
5555
$data = ['id' => 1];
5656
$json = ['name' => 'Hyperf'];
5757

58-
$request = Mockery::mock(RequestInterface::class);
58+
$request = Mockery::mock(ServerRequestInterface::class);
5959
$request->shouldReceive('getHeaderLine')->with('content-type')->andReturn('');
6060

6161
$this->assertSame($data, RequestStub::normalizeParsedBody($data));
6262
$this->assertSame($data, RequestStub::normalizeParsedBody($data, $request));
6363

64-
$request = Mockery::mock(RequestInterface::class);
64+
$request = Mockery::mock(ServerRequestInterface::class);
6565
$request->shouldReceive('getHeaderLine')->with('content-type')->andReturn('application/xml; charset=utf-8');
6666
$request->shouldReceive('getBody')->andReturn(new SwooleStream(Xml::toXml($json)));
6767

6868
$this->assertSame($json, RequestStub::normalizeParsedBody($json, $request));
6969

70-
$request = Mockery::mock(RequestInterface::class);
70+
$request = Mockery::mock(ServerRequestInterface::class);
7171
$request->shouldReceive('getHeaderLine')->with('content-type')->andReturn('application/json; charset=utf-8');
7272
$request->shouldReceive('getBody')->andReturn(new SwooleStream(Json::encode($json)));
7373
$this->assertSame($json, RequestStub::normalizeParsedBody($data, $request));
@@ -80,7 +80,7 @@ public function testNormalizeParsedBodyException()
8080
$this->getContainer();
8181

8282
$json = ['name' => 'Hyperf'];
83-
$request = Mockery::mock(RequestInterface::class);
83+
$request = Mockery::mock(ServerRequestInterface::class);
8484
$request->shouldReceive('getHeaderLine')->with('content-type')->andReturn('application/json; charset=utf-8');
8585
$request->shouldReceive('getBody')->andReturn(new SwooleStream('xxxx'));
8686
$this->assertSame([], RequestStub::normalizeParsedBody($json, $request));
@@ -93,7 +93,7 @@ public function testXmlNormalizeParsedBodyException()
9393
$this->getContainer();
9494

9595
$json = ['name' => 'Hyperf'];
96-
$request = Mockery::mock(RequestInterface::class);
96+
$request = Mockery::mock(ServerRequestInterface::class);
9797
$request->shouldReceive('getHeaderLine')->with('content-type')->andReturn('application/xml; charset=utf-8');
9898
$request->shouldReceive('getBody')->andReturn(new SwooleStream('xxxx'));
9999
$this->assertSame([], RequestStub::normalizeParsedBody($json, $request));
@@ -104,12 +104,12 @@ public function testNormalizeEmptyBody()
104104
$this->getContainer();
105105

106106
$json = ['name' => 'Hyperf'];
107-
$request = Mockery::mock(RequestInterface::class);
107+
$request = Mockery::mock(ServerRequestInterface::class);
108108
$request->shouldReceive('getHeaderLine')->with('content-type')->andReturn('application/json; charset=utf-8');
109109
$request->shouldReceive('getBody')->andReturn(new SwooleStream(''));
110110
$this->assertSame($json, RequestStub::normalizeParsedBody($json, $request));
111111

112-
$request = Mockery::mock(RequestInterface::class);
112+
$request = Mockery::mock(ServerRequestInterface::class);
113113
$request->shouldReceive('getHeaderLine')->with('content-type')->andReturn('application/json; charset=utf-8');
114114
$request->shouldReceive('getBody')->andReturn(new SwooleStream(''));
115115
$this->assertSame([], RequestStub::normalizeParsedBody([], $request));
@@ -122,7 +122,7 @@ public function testNormalizeParsedBodyInvalidContentType()
122122
$data = ['id' => 1];
123123
$json = ['name' => 'Hyperf'];
124124

125-
$request = Mockery::mock(RequestInterface::class);
125+
$request = Mockery::mock(ServerRequestInterface::class);
126126
$request->shouldReceive('getHeaderLine')->with('content-type')->andReturn('application/JSON');
127127
$request->shouldReceive('getBody')->andReturn(new SwooleStream(json_encode($json)));
128128
$this->assertSame($json, RequestStub::normalizeParsedBody($data, $request));
@@ -136,7 +136,7 @@ public function testOverrideRequestParser()
136136
RequestStub::setParser(new ParserStub());
137137
$json = ['name' => 'Hyperf'];
138138

139-
$request = Mockery::mock(RequestInterface::class);
139+
$request = Mockery::mock(ServerRequestInterface::class);
140140
$request->shouldReceive('getHeaderLine')->with('content-type')->andReturn('application/JSON');
141141
$request->shouldReceive('getBody')->andReturn(new SwooleStream(json_encode($json)));
142142
$this->assertSame(['mock' => true], RequestStub::normalizeParsedBody([], $request));

0 commit comments

Comments
 (0)