Skip to content

Commit 16525b9

Browse files
committed
Improve PATH_INFO support
1 parent 46fa43d commit 16525b9

File tree

4 files changed

+27
-28
lines changed

4 files changed

+27
-28
lines changed

api.php

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4539,8 +4539,12 @@ public function route(ServerRequestInterface $request): ResponseInterface
45394539
private function getRouteNumbers(ServerRequestInterface $request): array
45404540
{
45414541
$method = strtoupper($request->getMethod());
4542-
$path = explode('/', trim($request->getRequestTarget(), '/'));
4543-
array_unshift($path, $method);
4542+
$path = array();
4543+
$segment = $method;
4544+
for ($i = 1; $segment; $i++) {
4545+
array_push($path, $segment);
4546+
$segment = RequestUtils::getPathSegment($request, $i);
4547+
}
45444548
return $this->routes->match($path);
45454549
}
45464550

@@ -4553,7 +4557,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface
45534557

45544558
$routeNumbers = $this->getRouteNumbers($request);
45554559
if (count($routeNumbers) == 0) {
4556-
return $this->responder->error(ErrorCode::ROUTE_NOT_FOUND, $request->getRequestTarget());
4560+
return $this->responder->error(ErrorCode::ROUTE_NOT_FOUND, $request->getUri()->getPath());
45574561
}
45584562
try {
45594563
$response = call_user_func($this->routeHandlers[$routeNumbers[0]], $request);
@@ -7217,16 +7221,6 @@ public static function fromGlobals(): ServerRequestInterface
72177221
$psr17Factory = new Psr17Factory();
72187222
$creator = new ServerRequestCreator($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory);
72197223
$serverRequest = $creator->fromGlobals();
7220-
$uri = '';
7221-
if (isset($_SERVER['PATH_INFO'])) {
7222-
$uri .= $_SERVER['PATH_INFO'];
7223-
}
7224-
if (isset($_SERVER['QUERY_STRING'])) {
7225-
$uri .= '?' . $_SERVER['QUERY_STRING'];
7226-
}
7227-
if ($uri) {
7228-
$serverRequest = $serverRequest->withUri($psr17Factory->createUri($uri));
7229-
}
72307224
$body = file_get_contents('php://input');
72317225
if ($body) {
72327226
$serverRequest = $serverRequest->withParsedBody(self::parseBody($body));
@@ -7286,7 +7280,12 @@ public static function getParams(ServerRequestInterface $request): array
72867280

72877281
public static function getPathSegment(ServerRequestInterface $request, int $part): string
72887282
{
7289-
$pathSegments = explode('/', rtrim($request->getUri()->getPath(), '/'));
7283+
if (isset($_SERVER['PATH_INFO'])) {
7284+
$path = $_SERVER['PATH_INFO'];
7285+
} else {
7286+
$path = $request->getUri()->getPath();
7287+
}
7288+
$pathSegments = explode('/', rtrim($path, '/'));
72907289
if ($part < 0 || $part >= count($pathSegments)) {
72917290
return '';
72927291
}

src/Tqdev/PhpCrudApi/Middleware/Router/SimpleRouter.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Tqdev\PhpCrudApi\Middleware\Base\Middleware;
99
use Tqdev\PhpCrudApi\Record\ErrorCode;
1010
use Tqdev\PhpCrudApi\Record\PathTree;
11+
use Tqdev\PhpCrudApi\RequestUtils;
1112
use Tqdev\PhpCrudApi\ResponseUtils;
1213

1314
class SimpleRouter implements Router
@@ -73,8 +74,12 @@ public function route(ServerRequestInterface $request): ResponseInterface
7374
private function getRouteNumbers(ServerRequestInterface $request): array
7475
{
7576
$method = strtoupper($request->getMethod());
76-
$path = explode('/', trim($request->getRequestTarget(), '/'));
77-
array_unshift($path, $method);
77+
$path = array();
78+
$segment = $method;
79+
for ($i = 1; $segment; $i++) {
80+
array_push($path, $segment);
81+
$segment = RequestUtils::getPathSegment($request, $i);
82+
}
7883
return $this->routes->match($path);
7984
}
8085

@@ -87,7 +92,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface
8792

8893
$routeNumbers = $this->getRouteNumbers($request);
8994
if (count($routeNumbers) == 0) {
90-
return $this->responder->error(ErrorCode::ROUTE_NOT_FOUND, $request->getRequestTarget());
95+
return $this->responder->error(ErrorCode::ROUTE_NOT_FOUND, $request->getUri()->getPath());
9196
}
9297
try {
9398
$response = call_user_func($this->routeHandlers[$routeNumbers[0]], $request);

src/Tqdev/PhpCrudApi/RequestFactory.php

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,6 @@ public static function fromGlobals(): ServerRequestInterface
3434
$psr17Factory = new Psr17Factory();
3535
$creator = new ServerRequestCreator($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory);
3636
$serverRequest = $creator->fromGlobals();
37-
$uri = '';
38-
if (isset($_SERVER['PATH_INFO'])) {
39-
$uri .= $_SERVER['PATH_INFO'];
40-
}
41-
if (isset($_SERVER['QUERY_STRING'])) {
42-
$uri .= '?' . $_SERVER['QUERY_STRING'];
43-
}
44-
if ($uri) {
45-
$serverRequest = $serverRequest->withUri($psr17Factory->createUri($uri));
46-
}
4737
$body = file_get_contents('php://input');
4838
if ($body) {
4939
$serverRequest = $serverRequest->withParsedBody(self::parseBody($body));

src/Tqdev/PhpCrudApi/RequestUtils.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,12 @@ public static function getParams(ServerRequestInterface $request): array
2929

3030
public static function getPathSegment(ServerRequestInterface $request, int $part): string
3131
{
32-
$pathSegments = explode('/', rtrim($request->getUri()->getPath(), '/'));
32+
if (isset($_SERVER['PATH_INFO'])) {
33+
$path = $_SERVER['PATH_INFO'];
34+
} else {
35+
$path = $request->getUri()->getPath();
36+
}
37+
$pathSegments = explode('/', rtrim($path, '/'));
3338
if ($part < 0 || $part >= count($pathSegments)) {
3439
return '';
3540
}

0 commit comments

Comments
 (0)