|
|
|
@@ -4,6 +4,7 @@ namespace KTXC\Routing;
|
|
|
|
|
|
|
|
|
|
use DI\Attribute\Inject;
|
|
|
|
|
use KTXC\Http\Request\Request;
|
|
|
|
|
use KTXC\Http\Request\RequestInputParameters;
|
|
|
|
|
use KTXC\Http\Response\Response;
|
|
|
|
|
use KTXC\Injection\Container;
|
|
|
|
|
use KTXC\Module\ModuleManager;
|
|
|
|
@@ -207,7 +208,8 @@ class Router
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Dispatch a matched route meta and return a Response (or null if controller does not return one).
|
|
|
|
|
* Performs light argument resolution: Request object, route params, body fields, full body for array params.
|
|
|
|
|
* Performs light argument resolution: Request object, route params, body fields, query params, full body for array params.
|
|
|
|
|
* Precedence on name collision: route params > body fields > query params > parameter default.
|
|
|
|
|
*/
|
|
|
|
|
public function dispatch(Route $route, Request $request): ?Response
|
|
|
|
|
{
|
|
|
|
@@ -224,7 +226,8 @@ class Router
|
|
|
|
|
try {
|
|
|
|
|
$requestParameters = $request->getPayload();
|
|
|
|
|
} catch (\Throwable) {
|
|
|
|
|
// ignore payload errors
|
|
|
|
|
// ignore payload errors, fall back to an empty parameter bag
|
|
|
|
|
$requestParameters = new RequestInputParameters([]);
|
|
|
|
|
}
|
|
|
|
|
$reflectionMethod = new \ReflectionMethod($routeControllerName, $routeControllerMethod);
|
|
|
|
|
$routeParams = $route->params ?? [];
|
|
|
|
@@ -258,6 +261,11 @@ class Router
|
|
|
|
|
$callArgs[] = $requestParameters->get($reflectionParameterName);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
// if method parameter matches a query string param, use that
|
|
|
|
|
if ($request->query->has($reflectionParameterName)) {
|
|
|
|
|
$callArgs[] = $request->query->get($reflectionParameterName);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
// if method parameter did not match, but has a default value, use that
|
|
|
|
|
if ($reflectionParameter->isDefaultValueAvailable()) {
|
|
|
|
|
$callArgs[] = $reflectionParameter->getDefaultValue();
|
|
|
|
|