parent
d9f7cd5037
commit
f71f3fcf9e
8 changed files with 33 additions and 61 deletions
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
|||
0.2309.112031
|
||||
0.2309.112008
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
// HttpFx.php
|
||||
// Created: 2022-02-15
|
||||
// Updated: 2023-09-07
|
||||
// Updated: 2023-09-11
|
||||
|
||||
namespace Index\Http;
|
||||
|
||||
|
@ -207,16 +207,6 @@ class HttpFx implements IRouter {
|
|||
$this->router->use($path, $handler);
|
||||
}
|
||||
|
||||
/**
|
||||
* Merges another router with this one with possibility of changing its root.
|
||||
*
|
||||
* @param string $path Base path to use.
|
||||
* @param Router $router Router object to inherit from.
|
||||
*/
|
||||
public function merge(string $path, Router $router): void {
|
||||
$this->router->merge($path, $router);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a new route.
|
||||
*
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
<?php
|
||||
// HttpRequest.php
|
||||
// Created: 2022-02-08
|
||||
// Updated: 2023-08-16
|
||||
// Updated: 2023-09-11
|
||||
|
||||
namespace Index\Http;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use RuntimeException;
|
||||
use Index\Version;
|
||||
use Index\MediaType;
|
||||
use Index\Http\Content\IHttpContent;
|
||||
|
@ -80,7 +81,22 @@ class HttpRequest extends HttpMessage {
|
|||
$build = new HttpRequestBuilder;
|
||||
$build->setHttpVersion(new Version(...array_map('intval', explode('.', substr($_SERVER['SERVER_PROTOCOL'], 5)))));
|
||||
$build->setMethod($_SERVER['REQUEST_METHOD']);
|
||||
$build->setPath('/' . trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'));
|
||||
|
||||
// this currently doesn't "properly" support the scenario where a full url is specified in the http request
|
||||
$path = $_SERVER['REQUEST_URI'];
|
||||
$pathQueryOffset = strpos($path, '?');
|
||||
if($pathQueryOffset !== false)
|
||||
$path = substr($path, 0, $pathQueryOffset);
|
||||
else {
|
||||
$pathHashOffset = strpos($path, '#');
|
||||
if($pathHashOffset !== false)
|
||||
$path = substr($path, 0, $pathHashOffset);
|
||||
}
|
||||
|
||||
if(!str_starts_with($path, '/'))
|
||||
$path = '/' . $path;
|
||||
|
||||
$build->setPath($path);
|
||||
$build->setParams($_GET);
|
||||
$build->setCookies($_COOKIE);
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
// IRouter.php
|
||||
// Created: 2023-01-06
|
||||
// Updated: 2023-09-06
|
||||
// Updated: 2023-09-11
|
||||
|
||||
namespace Index\Routing;
|
||||
|
||||
|
@ -14,14 +14,6 @@ interface IRouter {
|
|||
*/
|
||||
public function use(string $path, callable $handler): void;
|
||||
|
||||
/**
|
||||
* Merges another router with this one with possibility of changing its root.
|
||||
*
|
||||
* @param string $path Base path to use.
|
||||
* @param Router $router Router object to inherit from.
|
||||
*/
|
||||
public function merge(string $path, Router $router): void;
|
||||
|
||||
/**
|
||||
* Adds a new route.
|
||||
*
|
||||
|
|
|
@ -16,7 +16,12 @@ class Route {
|
|||
private ?string $method;
|
||||
private string $path;
|
||||
|
||||
/** @internal */
|
||||
/**
|
||||
* Creates a Route attribute.
|
||||
*
|
||||
* @param string $pathOrMethod Method name if this is registering a route, path if this is registering middleware.
|
||||
* @param ?string $path Path if this registering a route, null if this is registering middleware.
|
||||
*/
|
||||
public function __construct(string $pathOrMethod, ?string $path = null) {
|
||||
if($path === null) {
|
||||
$this->method = null;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
// RouteInfo.php
|
||||
// Created: 2022-01-20
|
||||
// Updated: 2022-02-27
|
||||
// Updated: 2023-09-11
|
||||
|
||||
namespace Index\Routing;
|
||||
|
||||
|
@ -33,22 +33,6 @@ class RouteInfo {
|
|||
return $child;
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
public function mergeRoute(string $path, RouteInfo $route): void {
|
||||
if($path === '') {
|
||||
$this->children = array_merge($this->children, $route->children);
|
||||
$this->methods = array_merge($this->methods, $route->methods);
|
||||
$this->middlewares = array_merge($this->middlewares, $route->middlewares);
|
||||
if($this->dynamicChild === null)
|
||||
$this->dynamicChild = $route->dynamicChild;
|
||||
return;
|
||||
}
|
||||
|
||||
$this->getChild($path, $next)->mergeRoute($next, $route);
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
// Router.php
|
||||
// Created: 2022-01-18
|
||||
// Updated: 2023-09-06
|
||||
// Updated: 2023-09-11
|
||||
|
||||
namespace Index\Routing;
|
||||
|
||||
|
@ -33,7 +33,7 @@ class Router implements IRouter {
|
|||
if($method === 'head')
|
||||
$method = 'get';
|
||||
|
||||
return $this->route->resolve($method, trim($path, '/'), $args);
|
||||
return $this->route->resolve($method, $path, $args);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -43,17 +43,7 @@ class Router implements IRouter {
|
|||
* @param callable $handler Middleware function.
|
||||
*/
|
||||
public function use(string $path, callable $handler): void {
|
||||
$this->route->addMiddleware(trim($path, '/'), $handler);
|
||||
}
|
||||
|
||||
/**
|
||||
* Merges another router with this one with possibility of changing its root.
|
||||
*
|
||||
* @param string $path Base path to use.
|
||||
* @param Router $router Router object to inherit from.
|
||||
*/
|
||||
public function merge(string $path, Router $router): void {
|
||||
$this->route->mergeRoute(trim($path, '/'), $router->route);
|
||||
$this->route->addMiddleware($path, $handler);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -67,7 +57,7 @@ class Router implements IRouter {
|
|||
if(empty($method))
|
||||
throw new InvalidArgumentException('$method may not be empty.');
|
||||
|
||||
$this->route->addMethod($method, trim($path, '/'), $handler);
|
||||
$this->route->addMethod($method, $path, $handler);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
// RouterTest.php
|
||||
// Created: 2022-01-20
|
||||
// Updated: 2023-09-08
|
||||
// Updated: 2023-09-11
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
|
@ -89,11 +89,6 @@ final class RouterTest extends TestCase {
|
|||
});
|
||||
|
||||
$this->assertEquals(['meow', 'rules page'], $router2->resolve('GET', '/rules')->runAll());
|
||||
|
||||
$router1->merge('/info', $router2);
|
||||
|
||||
$this->assertEquals(['warioware', 'meow', 'rules page'], $router1->resolve('GET', '/info/rules')->runAll());
|
||||
|
||||
$this->assertEquals(['meow', 'numeric test'], $router2->resolve('GET', '/25252')->runAll());
|
||||
|
||||
$router3 = new Router;
|
||||
|
|
Loading…
Reference in a new issue