getMessage()); } $args = []; foreach ($reflectionMethod->getParameters() as $param) { if (IRequest::class === $param->getType()->getName() || is_subclass_of($param->getType()->getName(), IRequest::class)) { $args[] = $request; continue; } $name = $param->getName(); $value = $this->getFromRequest($name, $request); if ($value === null && $param->isDefaultValueAvailable()) { $value = $param->getDefaultValue(); } elseif ($value === null) { throw new InvalidArgumentException("Missing argument: $name"); } $args[] = $value; } return $args; } /** * Extracts a value from the request based on a key. * * @param string $key The key to look for in the request. * @param IRequest $req The request object. * @return mixed The value from the request or null if not found. */ public function getFromRequest(string $key, IRequest $req): mixed { $body = $req->getBody(); if (array_key_exists($key, $body)) { return $body[$key]; } $queryParams = $req->getQueryParameters(); if (array_key_exists($key, $queryParams)) { return $queryParams[$key]; } $requestParams = $req->getRequestParameters(); if (array_key_exists($key, $requestParams)) { return $requestParams[$key]; } return null; } }