Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

SortFilter generates unsupported array form for parameters

Ouverte Adaptée aux débutants
#8,744 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
72/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
php

Piste de recherche

Commencez par lire SortFilter et OpenApiFilterTrait::getOpenApiParameters(), puis examinez les tests des paramètres de requête OpenAPI générés. Le rapport indique que castToArray est probablement à l’origine du paramètre supplémentaire au format tableau. Le travail est terminé lorsque la documentation ne présente plus orderDate[] si le filtre rejette cette entrée et que les tests concernés réussissent.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

API Platform version(s) affected:
I have tested this on both api-platform/core 4.4.4 and api-platform/core 5.0.3

Description
When you add a SortFilter to an endpoint it generates 2 forms of the sortFilter for the given property. For example:

Let's create the following Collection endpoint:

#[ApiResource(
    shortName: 'Party',
    operations: [
        new GetCollection(
            '/activities/parties{._format}',
            parameters: [
                'orderDate' => new QueryParameter(
                    filter: new SortFilter(),
                    property: 'date',
                ),
            ]
        ),
    ],
    openapi: new Operation(
        tags: ['Activities'],
        summary: 'Parties',
    )
)]

This would result in the docs.jsonopenapi generating these two parameters for it:

{
            "name": "orderDate",
            "in": "query",
            "description": "Party orderDate",
            "required": false,
            "deprecated": false,
            "schema": {
              "type": "string",
              "enum": [
                "asc",
                "desc",
                "ASC",
                "DESC"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "orderDate[]",
            "in": "query",
            "description": "Party orderDate",
            "required": false,
            "deprecated": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "asc",
                  "desc",
                  "ASC",
                  "DESC"
                ]
              }
            },

The first works fine, but if you were to use ?orderDate[]= the endpoint will throw a constrain violation with code 422 saying the selected value is not valid. It seems Order filter creates the documentation for it but does not actually support this form of the filter (which makes sense to me as I cannot come up with a situation where you would want to be able to sort the same property in multiple directions).

How to reproduce
I think the previous header explains it adequately.

Possible Solution
One solution would be to overwrite the castToArray property of the parameter before passing it to OpenApiFilterTrait's getOpenApiParameters() method by altering the use statement in SortFilter to something like:

use OpenApiFilterTrait {
        getOpenApiParameters as private traitGetOpenApiParameters;
    }

and then setting castToArray to false if it was NULL by adding the following to SortFilter:

public function getOpenApiParameters(Parameter $parameter): OpenApiParameter|array|null
    {
        return $this->traitGetOpenApiParameters(
            $parameter->withCastToArray(
                $parameter->getCastToArray() ?? false,
            )
        );
    }
Langage dominant
PHP
Étoiles
2.6k
Forks
988
Merge moyen
1 j 19 h
PR mergées (30 j)
105

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de api-platform/core

Toutes les issues de api-platform/core

Issues similaires

Plus d'issues PHP

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.