public function __invoke(ServiceManagerInterface $serviceManager, array $moreParams = []) { if (!isset($moreParams['buffer'])) { throw new Exception\UnexpectedValueException('Could not parse request.'); } /** @var RequestParser $requestParser */ $requestParser = $serviceManager->get('RequestParser'); /** @var Request $request */ $request = null; $requestParser->on(['state'], function (Event $event, $method, $path, $version) use(&$request) { $request = new Request($method, $path, $version); $event->getEventEmitter()->on(['header'], function (Event $e, $headerName, $headerValue) use($request) { /** @var Request $request */ $name = \str_replace('-', '_', \strtoupper($headerName)); if ($name === 'COOKIE') { $cookieData = []; parse_str($headerValue, $cookieData); $request->setCookieParams(new ArrayObject($cookieData)); } else { $request->setHeader($name, $headerValue); } }); $event->getEventEmitter()->on(['body'], function (Event $e, $body) use($request) { /** @var Request $request */ if (!in_array($request->getMethod(), ['GET', 'HEAD']) && !empty($body)) { $postData = []; parse_str($body, $postData); $request->setPostParams(new ArrayObject($postData)); } }); }); $requestParser->parse($moreParams['buffer']); return $request; }
public function __invoke(ServiceManagerInterface $serviceManager, array $moreParams = []) { if (!isset($moreParams['buffer'])) { throw new Exception\UnexpectedValueException('Could not parse request.'); } $result = []; if (!\uv_http_parser_execute(\uv_http_parser_init(\UV::HTTP_REQUEST), $moreParams['buffer'], $result)) { throw new Exception\UnexpectedValueException('Could not parse request.'); } if (!isset($result['REQUEST_METHOD'])) { throw new Exception\BadRequestException('No request method found or this method is not supported.'); } if (!isset($result['PATH'])) { throw new Exception\BadRequestException('Invalid request path specified.'); } $request = new Request($result['REQUEST_METHOD'], $result['PATH']); $method = $result['REQUEST_METHOD']; if (!in_array($method, ['GET', 'HEAD']) && isset($result['HEADERS']) && isset($result['HEADERS']['BODY'])) { $postData = []; parse_str($result['HEADERS']['BODY'], $postData); $request->setPostParams(new ArrayObject($postData)); } if (isset($result['QUERY'])) { $queryData = []; parse_str($result['QUERY'], $queryData); $request->setQueryParams(new ArrayObject($queryData)); } if (isset($result['HEADERS'])) { $request->setHeaders(new ArrayObject($result['HEADERS'])); if (isset($result['HEADERS']['COOKIE'])) { $cookieData = []; parse_str($result['HEADERS']['COOKIE'], $cookieData); $request->setCookieParams(new ArrayObject($cookieData)); } } return $request; }
/** * @depends testGetPath */ public function testGetParamsFromCookie(Request $request) { $request->setCookieParams(new \ArrayObject(['bay' => 65])); $this->assertEquals(65, $request->getParam('bay')); }