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

Langage PHP Discussion :

Sauvegarder des données d'une API en BDD et les afficher


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Junior
    Inscrit en
    Septembre 2021
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Junior

    Informations forums :
    Inscription : Septembre 2021
    Messages : 70
    Points : 30
    Points
    30
    Par défaut Sauvegarder des données d'une API en BDD et les afficher
    Bonsoir,

    Je me permets de vous soumettre une problématique que je rencontre sur un projet de forum.

    Le but est de sauvegarder les données de l'API de chaque personnage du jeu Apex Legends (le nom et l'image du perso) en BDD dans chaque propriété de l'entité "Subject" reliée à l'entité "Catégory" de l'entrée Personnages, les récupérer et les afficher.

    Voilà schématiquement :

    Ici j'ai mon entité Catégory avec l'entrée Personnages
    Nom : Capture.PNG
Affichages : 202
Taille : 4,2 Ko

    A l'intérieur de cette catégorie j'aurais plusieurs entrées sujets (reliées à l’entité Subject) avec pour propriétés le nom et l'image de chaque personnage

    Ce qui donnera pour rendu final ca :
    Nom : Capture.PNG
Affichages : 197
Taille : 43,9 Ko

    Pour ce faire j'ai travaillé sur l'affichage depuis un autre controlleur et une autre template Twig.

    Voici le code du service ApiLegends

    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
    namespace App\Service;
     
    use Symfony\Contracts\HttpClient\HttpClientInterface;
     
    class ApiLegends
    {
        private $client;
     
        public function __construct(HttpClientInterface $client)
        {
            $this->client = $client;
        }
     
        public function getAllLegends(): array
        {
     
            $response = $this->client->request(
                'GET',
                'https://api.mozambiquehe.re/bridge?version=4&player=heyimlifeline&platform=PC&auth=xxHvYsvRMMYp471ObEO8',
            );
     
            return $response->toArray();
        }
    }
    Le Controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /**
         * @Route("/api/v1/legends", name="api_v1_legends")
         */
        public function browse(ApiLegends $apiLegends): Response
        {      
     
            $legends = $apiLegends->getAllLegends();
     
            return $this->render('api/v1/browse.html.twig', [
     
                'data' => $legends,
            ]);
        }
    }
    Et ici la Vue Twig

    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    {% for key, legend in data.legends.all %}        
                <div class="row border">
                    <div class="item-left col-3">
                        <div class="d-flex">
                            <img class="text-center w-25" src="{{ legend.ImgAssets.icon }}"> 
                            <h2>{{ key }}</h2>
                        </div>

    Aperçu de l'API en JSON que j'ai transformé en tableau pour récupéré les valeurs :

    Nom : Capture.PNG
Affichages : 188
Taille : 7,0 Ko

    Ce qui me donne le résultat que je souhaite, comme montré dans une capture au dessus.

    Maintenant j'aimerais pouvoir récupérer, sauvegarder ces données dans les propriétés de l'entité Subject (name + picture) reliés à la catégorie Personnages et les afficher sur ma vue Twig.

    En espérant avoir été clair et concis, je vous remercie d'avance pour votre aide.
    Images attachées Images attachées  

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Junior
    Inscrit en
    Septembre 2021
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Junior

    Informations forums :
    Inscription : Septembre 2021
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Je me permets de revenir sur le sujet que j'ai dû laisser en chemin.

    Pour vous situer le truc et vous montrer où est-ce que je veux aller voilà ce qu'il me faut :

    Sur le forum j'ai une entité Category qui va lister les catégories du forum. Si cette entité s'appelle Personnages (donc on arrive sur Category/Personnages), là j'ai une autre entité qui va s'interposer en proposant la liste des personnages.
    Une fois qu'on a cliqué sur un personnage on accède à la liste des sujets de ce personnage là et ensuite aux messages contenus dans le sujet.

    Ce qui va donner, seulement lorsqu'on est dans la route Category/Personnages, Category => SubCategory => Liste des personnages récupérés via une API et sauvegardés en BDD => Sujets de chaque personnages => Messages de chaque personnage

    Ce que j'essaie de faire dans un premier temps c'est de récupérer tous les personnages (nom + image associée) et les sauvegarder dans les setters setName et setPicture de la propriété SubCategory.
    Ce que je n'arrive pas à faire.

    J'ai fait quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach ($legends['legends']['all'] as $key => $value) {
                $sub->setName($key);
     
                $em->persist($sub);
                $em->flush();
            }
    $key contient le nom de chaque personnages. Le résultat c'est que je récupère seulement le dernier personnage de la liste. Ce qui est logique vu que les setters retournent un string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public function setName(?string $name): self
        {
            $this->name = $name;
     
            return $this;
        }

  3. #3
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 305
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 305
    Points : 15 633
    Points
    15 633
    Par défaut
    d'où vient le "$sub" ?
    quel bibliothèque utilisez vous pour la connexion à la base de données ?

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Junior
    Inscrit en
    Septembre 2021
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Junior

    Informations forums :
    Inscription : Septembre 2021
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Le $sub est la variable qui contient l’instanciation de la classe subCategory.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sub = new SubCategory;
    Cette entité contient les propriétés $name et $picture avec leurs getters et setters.

    Dans $name je veux récupérer le nom de chaque personnages
    Dans $picture leur image associé.


    Pour la connexion à la base de données j'utilise mySQL. Je sais pas si ça répond à votre question.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Junior
    Inscrit en
    Septembre 2021
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Junior

    Informations forums :
    Inscription : Septembre 2021
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Problème résolu. J'ai pu récupéré les données de l'API avec un form, les sauvegarder en BDD et les afficher.

    Merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/08/2015, 23h28
  2. Réponses: 15
    Dernier message: 02/02/2015, 14h44
  3. Sauvegarde des données d'une fenètre JavaFX
    Par bastfiche dans le forum JavaFX
    Réponses: 0
    Dernier message: 23/02/2014, 19h15
  4. [AC-2010] Empécher la sauvegarde des données sur une table liée
    Par gimly90 dans le forum Access
    Réponses: 1
    Dernier message: 08/09/2013, 08h09
  5. Réponses: 3
    Dernier message: 23/10/2010, 20h20

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