{"record":{"id":"be19b8c3cb550d5a","repo":"symfony/routing","slug":"parameter-query-must-be-an-array-of-query-parameters","errorCode":null,"errorMessage":"Parameter \"_query\" must be an array of query parameters.","messagePattern":"Parameter \"_query\" must be an array of query parameters\\.","errorType":"validation","errorClass":"InvalidParameterException","httpStatus":null,"severity":"error","filePath":"Generator/UrlGenerator.php","lineNumber":159,"sourceCode":"     * @throws InvalidParameterException           When a parameter value for a placeholder is not correct because\n     *                                             it does not match the requirement\n     */\n    protected function doGenerate(array $variables, array $defaults, array $requirements, array $tokens, array $parameters, string $name, int $referenceType, array $hostTokens, array $requiredSchemes = []): string\n    {\n        $defaultQuery = $defaults['_query'] ?? [];\n\n        if (!\\is_array($defaultQuery)) {\n            throw new InvalidParameterException(\\sprintf('Default \"_query\" must be an array of query parameters for route \"%s\".', $name));\n        }\n\n        $queryParameters = [];\n\n        if (isset($parameters['_query'])) {\n            if (\\is_array($parameters['_query'])) {\n                $queryParameters = $parameters['_query'];\n                unset($parameters['_query']);\n            } else {\n                throw new InvalidParameterException('Parameter \"_query\" must be an array of query parameters.');\n            }\n        }\n\n        $variables = array_flip($variables);\n        $mergedParams = array_replace($defaults, $this->context->getParameters(), $parameters);\n\n        // all params must be given\n        if ($diff = array_diff_key($variables, $mergedParams)) {\n            throw new MissingMandatoryParametersException($name, array_keys($diff));\n        }\n\n        $url = '';\n        $optional = true;\n        $message = 'Parameter \"{parameter}\" for route \"{route}\" must match \"{expected}\" (\"{given}\" given) to generate a corresponding URL.';\n        foreach ($tokens as $token) {\n            if ('variable' === $token[0]) {\n                $varName = $token[3];\n                // variable is not important by default","sourceCodeStart":141,"sourceCodeEnd":177,"githubUrl":"https://github.com/symfony/routing/blob/83fa223250b50f4f018c011e101c330e65ac63cc/Generator/UrlGenerator.php#L141-L177","documentation":"When generating a URL, a caller may pass '_query' in the parameters to supply extra query parameters. This error means the passed '_query' value is not an array, so it cannot be used as query parameters.","triggerScenarios":"Calling $generator->generate('route', ['_query' => 'a=1']) or otherwise passing a non-array _query parameter.","commonSituations":"Passing a query string instead of an array; copying controller defaults syntax into runtime generate() parameters.","solutions":["Pass an array: ['_query' => ['a' => '1']].","Append the query string manually to the generated URL instead of via _query.","Remove _query if the parameters are not intended as query overrides."],"exampleFix":"// before\n$generator->generate('list', ['_query' => 'page=2']);\n// after\n$generator->generate('list', ['_query' => ['page' => 2]]);","handlingStrategy":"type-guard","validationCode":"if (isset($params['_query']) && !is_array($params['_query'])) {\n    throw new LogicException('\"_query\" generate parameter must be an array.');\n}","typeGuard":"function isValidQueryParam(mixed $v): bool { return !isset($v) || is_array($v); }\n// usage: generate($name, array_filter($params, 'isValidQueryParam'))","tryCatchPattern":"use Symfony\\Component\\Routing\\Exception\\InvalidParameterException;\ntry { $url = $generator->generate($name, $params); } catch (InvalidParameterException $e) { // non-array _query\n    $url = $generator->generate($name, array_diff_key($params, ['_query' => null]));\n}","preventionTips":["Always pass _query as key=>value arrays","Never pass raw query strings via _query — append them to the URL instead","Wrap URL generation in a helper that validates parameters"],"tags":["php","symfony-routing","parameters"],"backgroundTag":"invalid-argument-value","analyzedSha":"83fa223250b50f4f018c011e101c330e65ac63cc","analyzedAt":"2026-09-14T03:19:46.280Z","contentChangedAt":"2026-09-14T03:19:46.280Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}