a litle bit reflection in the router, sorry

This commit is contained in:
2026-04-12 18:02:02 +05:00
parent 17c15b0860
commit 38a0af6b86

View File

@@ -22,7 +22,10 @@ use Closure as closure,
InvalidArgumentException as exception_argument, InvalidArgumentException as exception_argument,
UnexpectedValueException as exception_value, UnexpectedValueException as exception_value,
LogicException as exception_logic, LogicException as exception_logic,
ReflectionClass as reflection; Error as error,
ArgumentCountError as error_argument_count,
ReflectionClass as reflection,
ReflectionMethod as reflection_method;
/** /**
* Core * Core
@@ -255,12 +258,21 @@ final class core
// Writing the request options from the route options // Writing the request options from the route options
$request->options = $route->options; $request->options = $route->options;
// Initializing the controller method arguments
$arguments = $route->parameters + $route->variables + $request->parameters;
// Processing the method of the controller and exit (success) // Processing the method of the controller and exit (success)
$action = function() use ($route, $request): string { $action = function () use ($route, $request, $arguments): string {
try { if (array_keys($arguments) === array_column((new reflection_method($route->controller, $route->method))->getParameters(), 'name')) {
return (string) $route->controller->{$route->method}(...($route->parameters + $route->variables + $request->parameters)); // Arguments match the controller method arguments
} catch (exception $exception) {
return (string) $route->controller->{$route->method}($route->parameters + $route->variables + $request->parameters); // Exit (success)
return (string) $route->controller->{$route->method}(...$arguments);
} else {
// Arguments not match the controller method arguments
// Exit (success)
return (string) $route->controller->{$route->method}($arguments);
} }
}; };