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 :

Formulaire pour l'affichage


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 14
    Points : 14
    Points
    14
    Par défaut Formulaire pour l'affichage
    Bonjour,

    Je suis sous PHP 7.3 et symfony.

    J'ai posté le même sujet dans la partie AJAX mais je pense que ça concerne également PHP donc je poste ici.

    J'essaye de récupérer des informations de ma BDD grâce un input recherche. Dans cette input j'écris du texte et à chaque fois que je rentre une lettre, ma requête AJAX se réalise.

    Voici mon code :

    Entité 1 :
    Code php : 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
    /**
     * @ORM\Entity(repositoryClass="App\Repository\TestUnRepository")
     */
    class TestUn
    {
        /**
         * @ORM\Id()
         * @ORM\GeneratedValue()
         * @ORM\Column(type="integer")
         */
        private $id;
     
        /**
         * @ORM\Column(type="string", length=255)
         */
        private $nom;
     
        /**
         * @ORM\ManyToOne(targetEntity="App\Entity\TestDeux", inversedBy="un")
         */
        private $deux;

    Entité 2 :
    Code php : 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
    /**
     * @ORM\Entity(repositoryClass="App\Repository\TestDeuxRepository")
     */
    class TestDeux
    {
        /**
         * @ORM\Id()
         * @ORM\GeneratedValue()
         * @ORM\Column(type="integer")
         */
        private $id;
     
        /**
         * @ORM\Column(type="integer")
         */
        private $numero;
     
        /**
         * @ORM\OneToMany(targetEntity="App\Entity\TestUn", mappedBy="deux")
         */
        private $un;

    controleur :
    Code php : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    class TestController extends AbstractController
    {
        /**
         * @Route("/test/recherche", name="test_recherche")
         */
        public function index(EntityManagerInterface $em, Request $request)
        {
     
            $encoder = new JsonEncoder();
            $defaultContext = [
                AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object, $format, $context) {
                    return $object->getNom();
                },
            ];
            $normalizer = new ObjectNormalizer(null, null, null, null, null, null, $defaultContext);
     
            $serializer = new Serializer([$normalizer], [$encoder]);
     
     
            $sortieRepository = $em->getRepository(TestUn::class);
     
            $param = [
                "site" => $request->get('site'),
                "nom" => $request->get('nom')
            ];
     
     
            $sorties = $sortieRepository->afficher($param);
     
            $serializer->serialize($sorties, 'json');
     
            return $this->json(
                [
                    "sorties" => $serializer, //problème ici
                    "param" => $param
                ]);
     
        }

    JS/Ajax :
    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
    $('#nom2').on('keyup', function (e) {
     
        currentRequest = $.ajax({
            type: 'POST',
            url: '/test/recherche',
            data: {
                "site": null,
                "nom": $(this).val()
            },
            beforeSend: function () {
                if (currentRequest != null) {
                    currentRequest.abort();
                }
            }
     
        }).done(function (data) {
            console.log(data);
            console.log(data['param']);
            console.log(JSON.parse(data['sorties']));
        });
    });
    Actuellement, j'ai testé, en écrivant des une input de type search :
    - seul la dernière requête se réalise (si je tape 'bon', ça va me chercher 'bon' et non 'b' puis 'bo' puis 'bon') => ça fonctionne
    - envoyer plusieurs données d'Ajax vers PHP => ça fonctionne
    - envoyer un tableau de donnée en dire de PHP vers AJAX et le lire => ça fonctionne
    - faire une requête DQL qui renvoie des données vers AJAX => Fonctionne pas >_<

    Après moult recherche et réflexion, j'ai compris que lorsque mes infos venant de la BDD sont envoyés à AJAX en JSON, cela fait une référence circulaire. JSON traduit (Test1 besoin de Test2 qui a besoin de Test1 qui a besoin de Test2 et ainsi de suite).
    J'ai compris que je dois faire une sérialisation (que j'ai essayé plus haut).
    Mais ça ne fonctionne toujours pas, j'ai cette erreur qui apparaît :
    Uncaught SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at Object.<anonymous> (home.js:68)
    at c (jquery-3.4.1.min.js:2)
    at Object.fireWith [as resolveWith] (jquery-3.4.1.min.js:2)
    at l (jquery-3.4.1.min.js:2)
    at XMLHttpRequest.<anonymous> (jquery-3.4.1.min.js:2)
    Et même en faisant : console.log(data);.
    Mon tableau est vide dedans, pourtant ma requête DQL fonctionne et me renvoie bien toutes mes données.

    Et là, je bloque totalement. Si une âme charitable pouvait m'aider .

    Bonne soirée.

  2. #2
    Membre actif Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 100
    Points : 232
    Points
    232
    Par défaut
    Bonjour,

    Il manque le code du repository (la méthode $repo->afficher()) pour déboguer. De plus, tu sérialise le tableau des résultats avant de le passer à $this->json(). Ce n'est pas nécessaire : les utilitaires PHP et JS sont déjà récursifs quand il s'agit d'encoder/décoder du Json (l'utilitaire de Symfony étant une surcouche de json_encode() qui renvoie un object Response). Tu peux directement mettre le résultat dans le tableau en paramètre de return $this->json().

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 14
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    merci, avec tes propos, j'ai réussi à trouver ma solution.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/10/2017, 16h32
  2. [AC-2010] Utiliser le même formulaire pour différents affichages
    Par Monak dans le forum IHM
    Réponses: 1
    Dernier message: 10/01/2013, 06h03
  3. Réponses: 2
    Dernier message: 01/11/2009, 19h56
  4. Réponses: 2
    Dernier message: 04/04/2008, 17h15
  5. Formulaire pour base XML
    Par Nyx dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 12/02/2003, 20h51

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