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 :

Sortie de plusieurs informations BDD [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par défaut Sortie de plusieurs informations BDD
    Bonjour à tous,

    Je suis passé tout récemment à Symfony pour découvrir l'univers que propose ce framework de développement. Après avoir suivi quelques tutoriels plutôt basiques (blog, ...) je me suis décidé de coder mon propre forum, pour voir si j'ai bien compris le concept.

    Or, j'ai une chose que je souhaiterai faire contre laquelle je butte depuis deux jours maintenant. Je me tourne vers vous dans l'espoir que vous puissiez me conseiller. Je m'explique.

    Ci-après mon fichier schema.yml contenant les informations sur les 4 tables que je souhaite avoir pour mon forum:
    • Forum qui contient les différents forums,
    • Topic qui fait partie d'un forum et qui est un sujet de discussion,
    • Post qui fait partie d'un topic et qui est une réponse à un sujet,
    • User qui fait référence aux auteurs de sujets et de réponses.

    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
    29
    30
    31
    propel:
      forum_forum:
        _attributes: { phpName: Forum }
        id:
        name:           varchar(255)
        description:    longvarchar
        type:           integer
        created_at:
      forum_topic:
        _attributes: { phpName: Topic }
        id:
        forum_id:
        user_id:
        title:          varchar(255)
        body:           longvarchar
        created_at:
      forum_post:
        _attributes: { phpName: Post }
        id:
        topic_id:
        user_id:
        title:          varchar(255)
        body:           longvarchar
        created_at:
      forum_user:
        _attributes: { phpName: User }
        id:
        name:           varchar(255)
        email:          varchar(255)
        password:       varchar(255)
        created_at:
    Après avoir créé le fichier de schéma, comme dans le tutoriel officiel, j'ai créé les propel, généré le CRUD et me voilà parti pour la modification des templates pour ordonner le forum selon mes envies.

    J'ai pu faire pas mal de choses jusque là, mais actuellement je travaille sur la vue "forum/show" où est listé un des forums sélectionné par l'utilisateur et où sont affichés les différents sujets (Topic) qu'il contient.

    Pour récupérer les sujets qu'il contient, je suis allé modifier les actions de mon module "forum" et ai modifié la fonction executeShow() de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     public function executeShow()
      {
        $this->forum = ForumPeer::retrieveByPk($this->getRequestParameter('id'));
        $this->forward404Unless($this->forum);
     
        $c = new Criteria();
        $c->add(TopicPeer::FORUM_ID, $this->getRequestParameter('id'));
        $c->addAscendingOrderByColumn(TopicPeer::CREATED_AT);
        $this->topics = TopicPeer::doSelect($c);
      }
    Ceci me permet d'afficher les sujets (avec ses différentes informations que l'on peut voir dans le schema.yml : title, body, user_id, created_at).

    Dans le template showSuccess.php je récupère et affiche les informations de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      <?php foreach ($topics as $topic): ?>
      <tr>
        <td align='left'><?php echo link_to($topic->getTitle(), 'topic/show?id='.$topic->getId()) ?></td>
        <td align='center'></td>
        <td align='right'><?php echo $topic->getUserId() ?></td>
        <td align='right'><?php echo $topic->getCreatedAt() ?></td>
      </tr>
      <?php endforeach; ?>
    Dela sorte je réussis bien à afficher les informations sur le sujet, mais pas moyen d'aller au delà et de trouver une manière de récupérer les informations complètes sur l'auteur au travers de son user_id. Pour le moment ce n'est que l'identifiant qui s'affiche et non le pseudonyme de l'utilisateur.

    Avez vous une astuce, une solution à me proposer pour aboutir à mes fins ?

    Merci par avance à vous !

    Pierre P.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par défaut Réponse trouvée
    Bon, j'ai trouvé !

    Voici ce que j'ai du modifier.

    La fonction était mauvaise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      public function executeShow()
      {
        $this->forum = ForumPeer::retrieveByPk($this->getRequestParameter('id'));
        $this->forward404Unless($this->forum);
        
        $c = new Criteria();
        $c->add(TopicPeer::FORUM_ID, $this->getRequestParameter('id'));
        $c->addAscendingOrderByColumn(TopicPeer::CREATED_AT);
        $this->topics = TopicPeer::doSelectJoinUser($c);
      }
    Ensuite, dans le template showSuccess.php j'ai pu faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     <?php foreach ($topics as $topic): ?>
      <tr>
        <td align='left'><?php echo link_to($topic->getTitle(), 'topic/show?id='.$topic->getId()) ?></td>
        <td align='center'><?php echo 0 ?></td>
        <td align='right'><?php echo $topic->getUser()->getName() ?></td>
        <td align='right'><?php echo $topic->getCreatedAt() ?></td>
      </tr>
      <?php endforeach; ?>
    Merci quand même

    Bonne journée à vous.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 47
    Par défaut
    Salut,

    Oui tu aurais pu aussi créer une methode _toString() dans la class user du fichier /lib/model/User.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class User extends BaseUser
    {
    	public function __toString(){
    		return $this->getName();	
    	}	
    }
    ainsi, même avec un doSelect, $topic->getUser() t'aurais retourner le nom de l'auteur.

    A bientot!

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

Discussions similaires

  1. problème de post de plusieurs informations
    Par lordsaka dans le forum Langage
    Réponses: 1
    Dernier message: 21/05/2007, 08h30
  2. [Conception] recupération information bdd dans un formulaire
    Par kifouillou dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/09/2006, 09h37
  3. Sortie en plusieurs pdf découpés par chapitres
    Par Konrad Florczak dans le forum Mise en forme
    Réponses: 7
    Dernier message: 27/07/2006, 14h38
  4. Coabitation de plusieur serveur BDD
    Par e-m.guillaume dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/04/2006, 23h29
  5. Plusieurs informations clients
    Par piloumoi dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/06/2005, 14h34

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