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

Bibliothèques et frameworks PHP Discussion :

Peupler <select> avec des données de la bdd [CakePHP]


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur frontend
    Inscrit en
    Octobre 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur frontend

    Informations forums :
    Inscription : Octobre 2013
    Messages : 75
    Points : 56
    Points
    56
    Par défaut Peupler <select> avec des données de la bdd
    Bonjour,

    je découvre tout juste cakePHP d'où ma question de débutant: j'ai une vue add lancée par la méthode add() du controller PostController et je cherche à peupler un <select> avec des valeurs "location" d'une table "location" de ma base.
    Mon soucis est que je n'arrive pas à envoyer ces données dans ma vue. En fait, je n'arrive pas à déclencher la méthode de LocationController qui me permet de retourner les valeurs de la base.
    Voici ce que j'ai tenté de faire dans mon PostController pour pouvoir accéder à ma méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     public function __construct(){
            $this->location = new LocationController();
     }
    Mais j'ai cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Class 'LocationController' not found
    Est ce qu'une âme charitable aurait une idée?
    Merci d'avance

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Une règle de base du modèle MVC (et donc de CakePHP, qui respecte ce pattern) : un contrôleur n'invoque jamais un autre contrôleur, il utilise les modèles pour mener à bien la requête qui lui est demandée.

    Par défaut dans Cake, un contrôleur à accès au modèle qui lui est associé, mais il peut avoir accès aux modèles qui sont liés à ce modèle. Donc c'est là que tout se joue, au niveau de la liaison entre tes modèles. D'où ma question : ton modèle Post est t-il correctement lié à ton modèle Location ? Ont-ils une (des) liaison(s) en bdd ?
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur frontend
    Inscrit en
    Octobre 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur frontend

    Informations forums :
    Inscription : Octobre 2013
    Messages : 75
    Points : 56
    Points
    56
    Par défaut
    Salut Spartacusply,

    merci pour cette réponse, j'ignorais la partie sur l'invocation de controlleur entre eux, je te remercie doublement. Pour ce qui est de la liaison, oui mes tables "posts" et "locations" sont liées par une clef étrangère dans "posts". Ce que je cherche à faire c'est peupler un <select> avec toutes les valeurs de ma table "locations" pour insertion d'un nouveau post.

  4. #4
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Bien.

    Tes modèles, possédant une liaison en bdd sont-ils correctement liés au niveau de leurs classes respectives, comme l'indique la documentation ?
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur frontend
    Inscrit en
    Octobre 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur frontend

    Informations forums :
    Inscription : Octobre 2013
    Messages : 75
    Points : 56
    Points
    56
    Par défaut
    Je vais m'y plonger de suite, merci beaucoup pour ton aide

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur frontend
    Inscrit en
    Octobre 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur frontend

    Informations forums :
    Inscription : Octobre 2013
    Messages : 75
    Points : 56
    Points
    56
    Par défaut
    J'arrive bien à récupérer mes clefs étrangères mais je cherche toujours à récupérer les valeurs de ma table "location" , du coup est ce que ça te semble incohérent si je passe par le controleur de "locations" pour charger les données et que je valide par le controller de "posts"?

  7. #7
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    du coup est ce que ça te semble incohérent si je passe par le controleur de "locations" pour charger les données et que je valide par le controller de "posts"?
    Réponse : OUI !

    La recherche de données liées fais parti des principes de base du MVC, et c'est encore plus vrai pour Cake ! Tu as un mauvais raisonnement dans le genre "je découvre le framework mais je test 5 minutes, ça marche pas, tant pis, je zappe la doc et vais faire à ma manière, même si ça outrepasse tous les principes de base du MVC et donc du framework".

    Il existe une méthode prévue pour récupérer facilement les données qui iront remplir ton "select" : http://book.cakephp.org/2.0/fr/model...html#find-list
    De plus, en utilisant le FormHelper, il n'y a quasiment rien à faire dans ta vue pour que ton select soit créé et rempli avec les bonnes données automatiquement (et en plus, il y a même un exemple dans la doc).
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur frontend
    Inscrit en
    Octobre 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur frontend

    Informations forums :
    Inscription : Octobre 2013
    Messages : 75
    Points : 56
    Points
    56
    Par défaut
    Non ne te méprend pas, je suis pas dans le magouillage, je veux réellement me faire la main sur le framework (le premier que j'aborde d'ailleurs) et sur le MVC.
    J'avais vu la méthode find('list') mais n'ai pas pu m'en sortir pour le moment, je vais pas me laisser abattre aussi facilement! Merci pour tes conseils avisés

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur frontend
    Inscrit en
    Octobre 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur frontend

    Informations forums :
    Inscription : Octobre 2013
    Messages : 75
    Points : 56
    Points
    56
    Par défaut
    C'est bon ça fonctionne! Voici le code, je ne sais pas si je suis dans la bonne démarche ou pas:

    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
     
    public function add(){
     
            $this->loadModel('Locations');
            $locations = $this->Locations->find('list', array('fields'=>array('ID', 'NAME')));
            $this->set('locations',$locations);
     
            if($this->request->is('post')){
                $this->Post->create();
                if($this->Post->save($this->request->data)){
     
                    $this->Session->setFlash(__('Votre post a bien été sauvegardé'));
                    return $this->redirect(array('action'=>'index'));
                }
                $this->Session->setFlash(__('Erreur dans l\'ajout de votre post'));
            }
        }

  10. #10
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Tu n'utilises pas les modèles liés ici. Ca ne fonctionne sans doute pas parce que tu ne suis pas les conventions indiquées par Cake : les noms de classe de model sont au singulier et en CamelCase, ce qui devrait donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $locations = $this->Post->Location->find('list', array('fields' => array('ID', 'NAME')));
    //au lieu de :
    $this->loadModel('Locations');
    $locations = $this->Locations->find('list', array('fields'=>array('ID', 'NAME')));
    D'ailleurs à propos des conventions, c'est plutôt une bonne idée (et là ce n'est aucunement spécifique à Cake) d'avoir des attributs en minuscules en bdd, les mots séparés par des underscores et rien d'autres (pas 'ID' mais 'id', pas 'Grosse Pomme' mais 'grosse_pomme' )! Cela risque de te causer des soucis par la suite si tes attributs sont en majuscules.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur frontend
    Inscrit en
    Octobre 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur frontend

    Informations forums :
    Inscription : Octobre 2013
    Messages : 75
    Points : 56
    Points
    56
    Par défaut
    Ok, je vais me pencher un peu plus sur les modèles liés car je n'arrive pas encore avec le chainage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->Post->Location->find('list', array('fields' => array('ID', 'NAME')));
    Merci encore de prendre du temps pour me donner un coup de main, bonne soirée

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur frontend
    Inscrit en
    Octobre 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur frontend

    Informations forums :
    Inscription : Octobre 2013
    Messages : 75
    Points : 56
    Points
    56
    Par défaut
    Le soucis est résolu, comme l'a dit Spartacusply précédemment, le respect des conventions de nommage pour les tables, modèles et contrôleurs est essentiel. J'ai repris un projet en respectant point par point les conventions et l'associations des modèles et le problème a été réglé rapidement. Merci encore à Spartacusply pour le coup de main

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/07/2006, 10h56
  2. INNER JOIN avec des données de sélection
    Par EK1_ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/05/2006, 18h40
  3. [VBA-A]Remplir une textbox avec des données de tables.
    Par cuicui08 dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/03/2006, 10h28
  4. [datagrid]lier avec des données
    Par Alex35 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 11/12/2005, 10h10
  5. Créer du xml avec des données Oracle
    Par Baumont dans le forum Oracle
    Réponses: 3
    Dernier message: 23/11/2005, 15h35

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