1515use Symfony \Component \HttpKernel \Attribute \MapQueryParameter ;
1616use Symfony \Component \HttpKernel \Controller \ValueResolverInterface ;
1717use Symfony \Component \HttpKernel \ControllerMetadata \ArgumentMetadata ;
18- use Symfony \Component \HttpKernel \Exception \NotFoundHttpException ;
18+ use Symfony \Component \HttpKernel \Exception \HttpException ;
1919
2020/**
2121 * Resolve arguments of type: array, string, int, float, bool, \BackedEnum from query parameters.
2222 *
2323 * @author Ruud Kamphuis <[email protected] > 2424 * @author Nicolas Grekas <[email protected] > 2525 * @author Mateusz Anders <[email protected] > 26+ * @author Ionut Enache <[email protected] > 2627 */
2728final class QueryParameterValueResolver implements ValueResolverInterface
2829{
@@ -33,12 +34,14 @@ public function resolve(Request $request, ArgumentMetadata $argument): array
3334 }
3435
3536 $ name = $ attribute ->name ?? $ argument ->getName ();
37+ $ validationFailedCode = $ attribute ->validationFailedStatusCode ;
38+
3639 if (!$ request ->query ->has ($ name )) {
3740 if ($ argument ->isNullable () || $ argument ->hasDefaultValue ()) {
3841 return [];
3942 }
4043
41- throw new NotFoundHttpException ( sprintf ('Missing query parameter "%s". ' , $ name ));
44+ throw HttpException:: fromStatusCode ( $ validationFailedCode , sprintf ('Missing query parameter "%s". ' , $ name ));
4245 }
4346
4447 $ value = $ request ->query ->all ()[$ name ];
@@ -52,7 +55,7 @@ public function resolve(Request $request, ArgumentMetadata $argument): array
5255 $ filtered = array_values (array_filter ((array ) $ value , \is_array (...)));
5356
5457 if ($ filtered !== $ value && !($ attribute ->flags & \FILTER_NULL_ON_FAILURE )) {
55- throw new NotFoundHttpException ( sprintf ('Invalid query parameter "%s". ' , $ name ));
58+ throw HttpException:: fromStatusCode ( $ validationFailedCode , sprintf ('Invalid query parameter "%s". ' , $ name ));
5659 }
5760
5861 return $ filtered ;
@@ -103,7 +106,7 @@ public function resolve(Request $request, ArgumentMetadata $argument): array
103106 }
104107
105108 if (null === $ value && !($ attribute ->flags & \FILTER_NULL_ON_FAILURE )) {
106- throw new NotFoundHttpException ( sprintf ('Invalid query parameter "%s". ' , $ name ));
109+ throw HttpException:: fromStatusCode ( $ validationFailedCode , sprintf ('Invalid query parameter "%s". ' , $ name ));
107110 }
108111
109112 if (!\is_array ($ value )) {
@@ -117,7 +120,7 @@ public function resolve(Request $request, ArgumentMetadata $argument): array
117120 }
118121
119122 if ($ filtered !== $ value && !($ attribute ->flags & \FILTER_NULL_ON_FAILURE )) {
120- throw new NotFoundHttpException ( sprintf ('Invalid query parameter "%s". ' , $ name ));
123+ throw HttpException:: fromStatusCode ( $ validationFailedCode , sprintf ('Invalid query parameter "%s". ' , $ name ));
121124 }
122125
123126 return $ argument ->isVariadic () ? $ filtered : [$ filtered ];
0 commit comments