/** * {@inheritdoc} */ public function match(Request $request) { $path = $request->getPath(); foreach ($this->prefixes as $prefix) { if (strpos($path, $prefix) === 0) { return $this->route->match($request); } } return null; }
/** * @dataProvider providerRoute * * @param string $path The request path. * @param string $class The expected controller class. * @param string $method The expected controller method. */ public function testRoute($path, $class, $method) { $request = new Request(); $request->setPath($path); $route = new SimpleRoute(['/' => \name\space\IndexController::class, '/foo/' => \name\space\FooController::class, '/foo/bar/' => \name\space\Foo\BarController::class]); $match = $route->match($request); $this->assertInstanceOf(RouteMatch::class, $match); $reflection = $match->getControllerReflection(); $this->assertInstanceOf(\ReflectionMethod::class, $reflection); /** @var \ReflectionMethod $reflection */ $this->assertSame($class, $reflection->getDeclaringClass()->getName()); $this->assertSame($method, $reflection->getName()); }
public function match(Request $request) { if ($request->getPath() === '/a') { return RouteMatch::forFunction(function () { return (new Response())->setBody(new MessageBodyString('Hello')); }); } if ($request->getPath() === '/b') { return RouteMatch::forFunction(function () { return (new Response())->setBody(new MessageBodyString('World')); }); } return null; }
/** * {@inheritdoc} */ public function match(Request $request) { $path = $request->getPath(); if ($path == '') { return null; } if ($path[0] != '/') { return null; } $lastSlashPos = strrpos($path, '/'); $prefix = substr($path, 0, $lastSlashPos + 1); $action = substr($path, $lastSlashPos + 1); if (!isset($this->routes[$prefix])) { return null; } $class = $this->routes[$prefix]; if ($action == 'index') { return null; } elseif ($action == '') { $action = 'index'; } $method = $this->capitalize($action) . 'Action'; return RouteMatch::forMethod($class, $method); }
/** * {@inheritdoc} */ public function handle(Request $request) { $request->setHeader('Connection', 'close'); $path = $request->getHost(); if ($request->isSecure()) { $path = 'ssl://' . $path; } $fp = fsockopen($path, $request->getPort()); fwrite($fp, $request); return Response::parse(stream_get_contents($fp)); }
/** * {@inheritdoc} */ public function getRequestParameters(Request $request) { return $request->getPost(); }
/** * Returns a Request object representing the current request. * * Note that due to the way PHP works, the request body will be empty * when the Content-Type is multipart/form-data. * * Note that the query string data is purposefully parsed from the REQUEST_URI, * and not just taken from the $_GET superglobal. * This is to provide a consistent behaviour even when mod_rewrite is in use. * * @param boolean $trustProxy Whether to trust X-Forwarded-* headers. * @param integer $hostPortSource One of the PREFER_* or ONLY_* constants. * * @return Request */ public static function getCurrent($trustProxy = false, $hostPortSource = self::PREFER_HTTP_HOST) { $request = new Request(); if (isset($_SERVER['HTTPS'])) { if ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] === '1') { $request->isSecure = true; $request->port = 443; } } $httpHost = null; $httpPort = null; $serverName = null; $serverPort = null; if (isset($_SERVER['HTTP_HOST'])) { $host = $_SERVER['HTTP_HOST']; $pos = strrpos($host, ':'); if ($pos === false) { $httpHost = $host; $httpPort = $request->port; } else { $httpHost = substr($host, 0, $pos); $httpPort = (int) substr($host, $pos + 1); } } if (isset($_SERVER['SERVER_NAME'])) { $serverName = $_SERVER['SERVER_NAME']; } if (isset($_SERVER['SERVER_PORT'])) { $serverPort = (int) $_SERVER['SERVER_PORT']; } $host = null; $port = null; switch ($hostPortSource) { case self::PREFER_HTTP_HOST: $host = $httpHost !== null ? $httpHost : $serverName; $port = $httpPort !== null ? $httpPort : $serverPort; break; case self::PREFER_SERVER_NAME: $host = $serverName !== null ? $serverName : $httpHost; $port = $serverPort !== null ? $serverPort : $httpPort; break; case self::ONLY_HTTP_HOST: $host = $httpHost; $port = $httpPort; break; case self::ONLY_SERVER_NAME: $host = $serverName; $port = $serverPort; break; } if ($host !== null) { $request->host = $host; } if ($port !== null) { $request->port = $port; } if (isset($_SERVER['REQUEST_METHOD'])) { $request->method = $_SERVER['REQUEST_METHOD']; } if (isset($_SERVER['REQUEST_URI'])) { $request->setRequestUri($_SERVER['REQUEST_URI']); } if (isset($_SERVER['SERVER_PROTOCOL'])) { if (preg_match('|^HTTP/(.+)$|', $_SERVER['SERVER_PROTOCOL'], $matches) !== 1) { throw new HttpBadRequestException('Invalid protocol: ' . $_SERVER['SERVER_PROTOCOL']); } $request->protocolVersion = $matches[1]; } if (isset($_SERVER['REMOTE_ADDR'])) { $request->clientIp = $_SERVER['REMOTE_ADDR']; } $request->headers = self::getCurrentRequestHeaders(); $request->post = $_POST; $request->cookies = $_COOKIE; $request->files = UploadedFileMap::createFromFilesGlobal($_FILES); if (isset($_SERVER['CONTENT_LENGTH']) || isset($_SERVER['HTTP_TRANSFER_ENCODING'])) { $request->body = new MessageBodyResource(fopen('php://input', 'rb')); } if ($trustProxy) { if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ips = preg_split('/,\\s*/', $_SERVER['HTTP_X_FORWARDED_FOR']); $request->clientIp = array_pop($ips); } if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { $request->host = $_SERVER['HTTP_X_FORWARDED_HOST']; } if (isset($_SERVER['HTTP_X_FORWARDED_PORT'])) { $request->port = (int) $_SERVER['HTTP_X_FORWARDED_PORT']; } if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) { $request->isSecure = $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https'; } } return $request; }
/** * Creates a CookieOrigin from a Request instance. * * @param Request $request * * @return CookieOrigin */ public static function createFromRequest(Request $request) { return new self($request->getHost(), $request->getPath(), $request->isSecure()); }
/** * Runs the application. * * @return void */ public function run() { $request = Request::getCurrent(); $response = $this->handle($request); $response->send(); }
/** * @dataProvider providerAcceptLanguage * * @param string $acceptLanguage The Accept-Language header. * @param array $expectedResult The expected result. */ public function testGetAcceptLanguage($acceptLanguage, $expectedResult) { $request = new Request(); $request->setHeader('Accept-Language', $acceptLanguage); $this->assertSame($expectedResult, $request->getAcceptLanguage()); }
/** * Populates the form with the request data. * * @param \Brick\Http\Request $request * * @return \Brick\Form\Form */ public function populateFromRequest(Request $request) { return $this->populate($this->isMethodPost() ? $request->getPost() : $request->getQuery()); }
/** * Reads the session cookie from the request. * * @param \Brick\Http\Request $request * * @return void */ public function handleRequest(Request $request) { $sessionId = $request->getCookie($this->cookieParams['name']); $this->id = $sessionId !== null ? $sessionId : $this->generateId(); if ($this->isTimeToCollectGarbage()) { $this->collectGarbage(); } $this->data = []; }