diff --git a/CHANGELOG.md b/CHANGELOG.md index 72efffae70..70e8ab6787 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ - [#832](https://github.com/hyperf/hyperf/pull/832) Added `Hyperf\Utils\Codec\Json`. - [#833](https://github.com/hyperf/hyperf/pull/833) Added `Hyperf\Utils\Backoff`. +## Fixed + +- [#835](https://github.com/hyperf/hyperf/pull/835) Fixed `Request::inputs` default value does not works. + ## Optimized - [#832](https://github.com/hyperf/hyperf/pull/832) Optimized that response will throw a exception when json format failed. diff --git a/src/http-server/src/Request.php b/src/http-server/src/Request.php index cf4a51b2e2..351923da2f 100644 --- a/src/http-server/src/Request.php +++ b/src/http-server/src/Request.php @@ -93,10 +93,9 @@ public function input(string $key, $default = null) public function inputs(array $keys, $default = null): array { $data = $this->getInputData(); - $result = $default ?? []; foreach ($keys as $key) { - $result[$key] = data_get($data, $key); + $result[$key] = data_get($data, $key, $default[$key] ?? null); } return $result; diff --git a/src/http-server/tests/RequestTest.php b/src/http-server/tests/RequestTest.php index 15aaca49dd..762407e5dc 100644 --- a/src/http-server/tests/RequestTest.php +++ b/src/http-server/tests/RequestTest.php @@ -29,6 +29,7 @@ protected function tearDown() { Mockery::close(); Context::set(ServerRequestInterface::class, null); + Context::set('http.request.parsedData', null); } public function testRequestHasFile() @@ -60,4 +61,38 @@ public function testRequestHeaderDefaultValue() $res = $psrRequest->header('Hyperf-Version', 'v0'); $this->assertSame('v1.0', $res); } + + public function testRequestInput() + { + $psrRequest = Mockery::mock(ServerRequestInterface::class); + $psrRequest->shouldReceive('getParsedBody')->andReturn(['id' => 1]); + $psrRequest->shouldReceive('getQueryParams')->andReturn([]); + Context::set(ServerRequestInterface::class, $psrRequest); + + $psrRequest = new Request(); + $this->assertSame(1, $psrRequest->input('id')); + $this->assertSame('Hyperf', $psrRequest->input('name', 'Hyperf')); + } + + public function testRequestAll() + { + $psrRequest = Mockery::mock(ServerRequestInterface::class); + $psrRequest->shouldReceive('getParsedBody')->andReturn(['id' => 1]); + $psrRequest->shouldReceive('getQueryParams')->andReturn(['name' => 'Hyperf']); + Context::set(ServerRequestInterface::class, $psrRequest); + + $psrRequest = new Request(); + $this->assertSame(['id' => 1, 'name' => 'Hyperf'], $psrRequest->all()); + } + + public function testRequestInputs() + { + $psrRequest = Mockery::mock(ServerRequestInterface::class); + $psrRequest->shouldReceive('getParsedBody')->andReturn(['id' => 1]); + $psrRequest->shouldReceive('getQueryParams')->andReturn([]); + Context::set(ServerRequestInterface::class, $psrRequest); + + $psrRequest = new Request(); + $this->assertSame(['id' => 1, 'name' => 'Hyperf'], $psrRequest->inputs(['id', 'name'], ['name' => 'Hyperf'])); + } }