/** * @return mixed|null */ public function getRoute() { $this->_routeMap->sortRoutes(); foreach ($this->_routeMap as $route) { if ($this->_request->getMethod() !== $route->getRequestMethod()) { continue; } $route->replaceTokens(); if (preg_match(sprintf("#^%s\$#i", $route->getPattern()), $this->_request->getUri()->getPath(), $matches)) { $this->_request = $this->_request->withAttribute('match', $route->getPattern()); foreach ($matches as $key => $value) { if (!is_int($key)) { $this->_request = $this->_request->withAttribute($key, $value); } } return $route; } } return null; }
/** * {@inheritdoc} */ public static function fromGlobals(array $server = null, array $query = null, array $body = null, array $cookies = null, array $files = null) { $server = static::normalizeServer($server ?: $_SERVER); $files = static::normalizeFiles($files ?: $_FILES); $headers = static::marshalHeaders($server); $request = new ServerRequest($server, $files, static::marshalUriFromServer($server, $headers), static::get('REQUEST_METHOD', $server, 'GET'), 'php://input', $headers); $contentType = current($request->getHeader('Content-Type')); $input = file_get_contents('php://input'); // support header like "application/json" and "application/json; charset=utf-8" if ($contentType !== false && stristr($contentType, 'application/json')) { $data = (array) json_decode($input); } else { switch ($request->getMethod()) { case 'POST': $data = $_POST; break; default: parse_str($input, $data); break; } } return $request->withCookieParams($cookies ?: $_COOKIE)->withQueryParams($query ?: $_GET)->withParsedBody($body ?: $data); }
public function testSimulateRequest() { $simulatedRequest = "DELETE / HTTP/1.1\r\nBar: faz\r\nHost: php-middleware.com"; $postBody = http_build_query([RequestSimulatorMiddleware::PARAM => $simulatedRequest]); $stream = new Stream('php://memory', 'wb+'); $stream->write($postBody); $request = new ServerRequest([], [], new Uri(), 'POST', $stream, ['Content-type' => 'application/x-www-form-urlencoded']); $responseBody = json_encode(['boo' => 'foo']); $response = new Response('php://memory', 200, ['content-type' => 'application/json']); $response->getBody()->write($responseBody); $next = function (ServerRequestInterface $request, ResponseInterface $response) { $this->assertSame('DELETE', $request->getMethod()); $this->assertSame('faz', $request->getHeaderLine('Bar')); return $response; }; /* @var $result ResponseInterface */ $result = call_user_func($this->middleware, $request, $response, $next); $body = (string) $result->getBody(); $this->assertContains('text/html', $result->getHeaderLine('Content-type')); $this->assertContains('{"boo":"foo"}', $body); $this->assertContains('<html>', $body); $this->assertContains('DELETE / HTTP/1.1', $body); }
/** * Create * * @return Request Request */ public static function fromRequest(ServerRequest $request) { return new HttpMessages_CraftRequest($request->getServerParams(), $request->getUploadedFiles(), $request->getUri(), $request->getMethod(), $request->getBody(), $request->getHeaders(), $request->getCookieParams(), $request->getQueryParams(), $request->getParsedBody(), $request->getProtocolVersion()); }
/** * Returns true if a JSON-RCP request has been received. * * @return boolean */ public function isJsonRpc(Request $request) { $method = $request->getMethod(); $type = $request->getHeader('content-type'); return $method === 'POST' && !empty($type[0]) && strpos($type[0], 'application/json') !== false; }