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 :

Symfony et requête liste déroulante avec Angular [4.x]


Sujet :

Symfony PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut Symfony et requête liste déroulante avec Angular
    Bonsoir,

    Je voulais savoir concernant l'envoi d'une requête par angular, j'ai des listes déroulantes marque, modèle, carburant, prix, année, kilométrage.

    Quand je fais ma sélection et que je fais envoyé coté Angular j'aurai par exemple l'URL suivante .../api/v1/annonces?marque=renault&modele=citroen&carburant=essence&annee=2015&kilometrage=100000&prix=10000

    Donc ma question est la suivante dois-je faire dans Symfony dans mon controller une route du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /**
     * @Route("/api/v1/annonces/{marque}/{modele}/{carburant}/{annee}/{kilometrage}/{prix}", name="list", methods={"GET"})
     */
    public function list(Annonce $annonce): Response{...}

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    bonjour,
    tu récupères les paramètres de la requête HTTP
    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
     
    /**
     * @Route("/api/v1/annonces", name="list", methods={"GET"})
     */
    public function list( Request $request , AnnonceRepository  $annonceRepository): Response{
      $marque = $request->query->get('marque');
      $modele = $request->query->get('modele');
      $carburant = $request->query->get('carburant');
      $annee = $request->query->get('annee');
      $km = $request->query->get('kilometrage');
      $prix = $request->query->get('prix', 1); // le prix par défaut est de 1€ si aucun prix n'est renseigné
     
     // dans le repository associée à l'entité Annonce, tu crées une méthode findAnnoncesBy qui va
     //exécuter une requête  DQL dynamique en fonction des paramètres reçus
      $annonces = $annonceRepository->findAnnoncesBy( $marque, $modele, $carburant, $annee, $km, $prix);
     
     // tu sérialises le tableau d'objets annonces en json
      // rendu de la réponse json
    }
    côté angular
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://domaine.com/api/v1/annonces?marque=renault&modele=citroen&carburant=essence&annee=2015&kilometrage=100000&prix=10000
    tu peux utiliser postman pour envoyer la requête HTTP à l'API. ça te permet de mieux déboguer

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut
    Mais si tu as des paramètres null, si au lieu d'avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://domaine.com/api/v1/annonces?marque=renault&modele=citroen&carburant=essence&annee=2015&kilometrage=100000&prix=10000
    tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://domaine.com/api/v1/annonces?marque=renault&modele=citroen
    est-ce qu'il faut obligatoirement refaire une méthode findAnnonceBy mais cette fois ci juste pour marque et modele un truc du genre :
    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
     
    /**
     * @Route("/api/v1/annonces", name="list", methods={"GET"})
     */
    public function list( Request $request , AnnonceRepository  $annonceRepository): Response{
      $marque = $request->query->get('marque');
      $modele = $request->query->get('modele');
      $carburant = $request->query->get('carburant');
      $annee = $request->query->get('annee');
      $km = $request->query->get('kilometrage');
      $prix = $request->query->get('prix', 1); // le prix par défaut est de 1€ si aucun prix n'est renseigné
     
      $annonces = $annonceRepository->findAnnoncesByMarqueModele( $marque, $modele);
      ...
    }
    et gérer les variable null ? Ou faut t-il gérer les variables null dans le DQL mais là je vois pas comment faire.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    est-ce qu'il faut obligatoirement refaire une méthode findAnnonceBy mais cette fois ci juste pour marque et modele un truc du genre :
    il s'agit ici de construire une requête dynamique où seuls les clauses de la requête changent. On ajoute la clause where que si le paramètre n'est pas null.c'est le même principe qu'en SQL et PHP. Quant à la méthode findAnnonceBy(), ses paramètres peuvent être déclarés comme optionnels.

    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
     
    //AnnonceRepository.php
     
    public function findAnnoncesBy( ?string $marque, ?string $modele, ?string $carburant, ?int $annee, ?int $km, float $prix): array {
         $qb = $this->createQueryBuilder('a');
     
         //la marque n'est pas null
         if( !empty( $marque ) {
            $qb->andWhere('a.marque LIKE :marque')
                 ->setParameter('marque', $marque );
        }
     
       //le modèle n'est pas null
         if( !empty( $modele ) {
            $qb->andWhere('a.modele LIKE :modele')
                  ->setParameter('modele', $modele );
        }
      // idem pour carburant, prix ...
     
      return $qb->getQuery()
                 ->getResult();
    }

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut
    Merci armel18 pour ton aide

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut
    armel18, tu peux me dire quel est l'utilité du LIKE ici : $qb->andWhere('a.marque LIKE :marque') car le nom de colonne marque est connu dans la bdd.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    Citation Envoyé par hbx360 Voir le message
    armel18, tu peux me dire quel est l'utilité du LIKE ici : $qb->andWhere('a.marque LIKE :marque') car le nom de colonne marque est connu dans la bdd.
    l'opérateur LIKE va chercher que la marque ( ex: Renault ) choisie par l'utilisateur est bien présente dans la table annonce. L'utilisateur n'a besoin que de voir la marque Renault.
    Mais on aurait pu mettre l'opérateur = à la place de LIKE le résultat n'aurait pas changé. exemple avec = :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $qb->andWhere('a.marque =:marque')
     ->setParameter('marque', $marque );
    Après pour comparer les nombres on utilise l'opérateur égal (=).

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut
    Merci pour ta réponse.

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

Discussions similaires

  1. [AC-365] Liste déroulante avec requête VraiFaux
    Par yclaf dans le forum IHM
    Réponses: 10
    Dernier message: 16/05/2020, 18h16
  2. Réponses: 8
    Dernier message: 16/03/2015, 22h39
  3. Réponses: 10
    Dernier message: 29/04/2011, 12h02
  4. requête sur liste déroulante avec pb date
    Par jeinny dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 05/06/2008, 14h12
  5. [VBA] liste déroulante avec requête
    Par dalmasma dans le forum VBA Access
    Réponses: 17
    Dernier message: 16/07/2007, 14h52

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