IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

SF5 Api Platform


Sujet :

Symfony PHP

  1. #1
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut SF5 Api Platform
    Bonjour,

    Je suis entrain de prendre main Api Platform et je me heurte a un problème que la doc na pas pu résoudre ou je n'es pas trouvé mon bonheur dedans .
    Donc j'essai de modifier la doc swagger pour la partie "Example Value" en utilisant l’annotation ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        /**
         * @ApiProperty(
         *     attributes={
         *         "openapi_context"={
         *             "type"="array",
         *             "format"="array",
         *             "example"={{}},
         *         }
         *     }
         * )
         */
        private $clients;
    Ce qui modifie la partie du swager cf le screen :
    Nom : api.png
Affichages : 364
Taille : 34,1 Ko

    Cela marche bien mais j'aimerais pouvoir cibler la méthode sur laquelle je fais cette modification par exemple, j'aimerais que cette modification s'applique que pour la méthode GET pour ce cas la.

    Si quelqu'un a une idée comment on peut faire cela .
    Merci a vous.

  2. #2
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Par défaut
    Salut,

    En général quand on veut personnaliser le comportement d'une opération donnée, ça se passe dans l'annotation ApiResource donc si à l'intérieur de ça tu peux agir sur le "openapi_context", peut-être que quelque chose comme ça pourrait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    /**
      *  @ApiRessource(
      *    itemOperations={
      *      "get": {
      *        "openapi_context"={
      *          "type"="array",
      *          "format"="array",
      *          "example"={{}},
      *        } 
      *      }
      *    }
      *  )
      */

  3. #3
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut
    Merci pour ton retour 😊, j'avais testé ta proposition mais ça avait aucun effet et je voie pas comment je peux cibler la variable client 🤔.

    Merci

  4. #4
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Par défaut
    Dans ce cas peut-être que tu es obligé de décorer le service : https://api-platform.com/docs/core/s...-specification

    Je dis peut-être n'importe quoi mais dans la méthode normalize tu devrais pouvoir altérer à la volée la doc Swagger (OpenAPI) en ajoutant ton code uniquement sur le path et l'opération que tu veux (c'est peut-être pas fou niveau perf de multiplier les décorateurs cependant).

  5. #5
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut
    Merci, je vais essayer de voir pour décorer après c'est juste de la doc donc je pense pas que ça joue sur les perfs de l'api.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 162
    Par défaut
    Salut,

    Je relance un peu cette discussion pour savoir si vous avez réussi avec une méthode GET de faire une route customiser.

    Je vais vous dire ce que j'ai de mon côté.
    Je suppose une entité Facture par exemple avec un id en clé primaire et une seconde propriété string reference.

    Moi, ce que je voudrais c'est pouvoir réccupérer une facture mais en faisant un GET sur l'attribut référence qui serait pas la clé primaire ID du coup.

    Voilà ce que je fais:

    Je crée un controller ReferenceController

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    class ReferenceController extends AbstractController
    {
        private RefHandler $refHandler;
     
        public function __construct(RefHandler $refHandler)
        {
            $this->refHandler = $refHandler;
        }
     
        /**
         * @Route(
         *     name="get_facture_with_ref",
         *     path="/api/facture/{reference}",
         *     methods={"GET"},
         *     defaults={
         *          "_controller"="\AppBundle\Controller\ReferenceController",
         *          "_api_resource_class"=Facture::class,
         *          "_api_item_operation_name"="special",
         *          "_api_property"="identifier=false"
         *      }
         * )
         */
        public function invoke(string $data): JsonResponse
        {
    	$this->refHandler->handle($data);
        }
    }
    J'ai du coup ajouté un service refHandler qui est juste une classe PHP avec une méthode handle.

    Ce que j'ai ajouté dans config/api_platform/resources.yaml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    resources:
        App\Entity\Facture:
            ItemOperations:
                special:
                    route_name: "get_facture_with_ref"
    Je vois bien la route sur API Platform mais toujours avec ID et par reference et quand je le lance, cela me met une erreur de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    "title": "An error occured",
    "detail": "Invalid identifier value or configuration."
    Je vous remercie si vous avez une idée.

Discussions similaires

  1. Avis sur Api platform
    Par NukaCola dans le forum Symfony
    Réponses: 12
    Dernier message: 06/01/2020, 13h23
  2. Réponses: 3
    Dernier message: 06/12/2019, 09h35
  3. Api Platform - recherche personnalisée
    Par The Symfony Guyy dans le forum Symfony
    Réponses: 2
    Dernier message: 10/06/2019, 21h08
  4. [4.x] API Platform: associer plusieurs resources à une même entité
    Par danidan75 dans le forum Symfony
    Réponses: 6
    Dernier message: 06/06/2019, 12h33
  5. [4.x] API PLATFORM : groups et controle d'accès
    Par duke666 dans le forum Symfony
    Réponses: 3
    Dernier message: 24/03/2019, 17h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo