getParameters() as $param) { $paramType = $param->getType(); if ($paramType === null) { continue; } $parameterClassName = $paramType->getName(); try { $parameterClass = new ReflectionClass($parameterClassName); } catch (\ReflectionException $e) { continue; } // If there's a FormRequest, we check there for @queryParam tags. if (class_exists(LaravelFormRequest::class) && $parameterClass->isSubclassOf(LaravelFormRequest::class) || class_exists(DingoFormRequest::class) && $parameterClass->isSubclassOf(DingoFormRequest::class)) { $formRequestDocBlock = new DocBlock($parameterClass->getDocComment()); $queryParametersFromDocBlock = $this->getQueryParametersFromDocBlock($formRequestDocBlock->getTags()); if (count($queryParametersFromDocBlock)) { return $queryParametersFromDocBlock; } } } $methodDocBlock = RouteDocBlocker::getDocBlocksFromRoute($route)['method']; return $this->getQueryParametersFromDocBlock($methodDocBlock->getTags()); } private function getQueryParametersFromDocBlock($tags) { $parameters = collect($tags) ->filter(function ($tag) { return $tag instanceof Tag && $tag->getName() === 'queryParam'; }) ->mapWithKeys(function ($tag) { // Format: // @queryParam <"required" (optional)> // Examples: // @queryParam text string required The text. // @queryParam user_id The ID of the user. preg_match('/(.+?)\s+(required\s+)?(.*)/', $tag->getContent(), $content); $content = preg_replace('/\s?No-example.?/', '', $content); if (empty($content)) { // this means only name was supplied list($name) = preg_split('/\s+/', $tag->getContent()); $required = false; $description = ''; } else { list($_, $name, $required, $description) = $content; $description = trim($description); if ($description == 'required' && empty(trim($required))) { $required = $description; $description = ''; } $required = trim($required) == 'required' ? true : false; } list($description, $value) = $this->parseParamDescription($description, 'string'); if (is_null($value) && ! $this->shouldExcludeExample($tag)) { $value = Str::contains($description, ['number', 'count', 'page']) ? $this->generateDummyValue('integer') : $this->generateDummyValue('string'); } return [$name => compact('description', 'required', 'value')]; })->toArray(); return $parameters; } }