Пример #1
0
 /**
  * {@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;
 }
Пример #2
0
 /**
  * @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());
 }
Пример #3
0
 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;
 }
Пример #4
0
 /**
  * {@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);
 }
Пример #5
0
 /**
  * {@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));
 }
Пример #6
0
 /**
  * {@inheritdoc}
  */
 public function getRequestParameters(Request $request)
 {
     return $request->getPost();
 }
Пример #7
0
 /**
  * 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;
 }
Пример #8
0
 /**
  * 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());
 }
Пример #9
0
 /**
  * Runs the application.
  *
  * @return void
  */
 public function run()
 {
     $request = Request::getCurrent();
     $response = $this->handle($request);
     $response->send();
 }
Пример #10
0
 /**
  * @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());
 }
Пример #11
0
 /**
  * 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());
 }
Пример #12
0
 /**
  * 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 = [];
 }