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 :

[Doctrine2] Gestion de commentaires et héritage doctrine


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Points : 9
    Points
    9
    Par défaut [Doctrine2] Gestion de commentaires et héritage doctrine
    Bonjour à tous,

    Je souhaite créer un système de commentaires en symfony2/doctrine.
    Je peux commenter des articles ou des événements, qui sont deux types d'objets distincts avec leur table propre.
    Je souhaite n'avoir à écrire qu'un fois les vues et si possible controleur et managers qui gèrent ces commentaires, car la seule différence est la classe vers laquelle ils ont la relation many-to-one.

    J'ai 3 bundles chacun gérant les types d'objets comme leur nom l'indique:
    - ArticleBundle
    - EvenementBundle
    - CommentBundle

    Quelle est la bonne stratégie de design à adopter?
    L'héritage de doctrine ou bien un design pattern objet?

    Avoir une classe de base BaseComment dont héritent mes commentaires?
    Comment établir la relation many-to-one entre mon commentaire et les articles, et entre mon commentaire et les évènements?
    Est-ce qu'articles et évènements doivent aussi hériter d'une classe de base commune pour que ce soit possible?

    Je sens que c'est un cas d'utilisation de base de l'héritage doctrine, mais je n'arrive pas à me déterminer quel est le design à adopter. Pouvez-vous m'aider en m'indiquant les différentes options, et si possible la hierarchie des classes à créer, et à quel niveau établir les relations?

    Par avance merci.

    Edit: J'ai vu qu'il y a un sous-forum Doctrine2 mais je ne sais pas comment déplacer ces messages

  2. #2
    Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Août 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2004
    Messages : 39
    Points : 42
    Points
    42
    Par défaut Même problème
    Bonjour,

    Bon, on a les mêmes problèmes à ce que je vois.
    J'ai posté cet après midi un message équivalent (je n'avais pas vu ton message):

    Dès que j'ai une solution, je te poste la réponse...

    Arnaud

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Possible solution
    Salut,

    Aprés avoir discuté avec un ami, la solution vers laquelle je m'oriente est la suivante:

    - Entité: Commentable (CoreBundle ou CommentBundle? Pas encore décidé)
    - Entité: Comment (CommentBundle)
    - Entité: Article extends Commentable (ArticleBundle)
    - Entité: Event extends Commentable (EventBundle)

    - Relation: Commentable <= One-to-Many => Commentaire
    - Stratégie d'héritage: Class Table Inheritance.
    - Toutes les vues et controlleurs gérant les commentaires pourront s'appuyer sur la classe Comment.

    J'imagine, mais je n'ai pas encore essayé, qu'il suffit d'utiliser la colonne marquée comme "DiscriminatorMap" pour savoir quel est le type d'entité d'un Commentable, et de le caster ensuite en Article ou en Event.

    Malgrés mes craintes concernant les performances, il parait que pour un site de taille moyenne ça va bien. Et il parait aussi que Doctrine gère ça trés bien.
    Plus d'infos sur l'héritage Symfony2/Doctrine: ici.

    En gros ça devrait donner quelque chose comme ça (pseudo-code):
    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
    32
    33
    34
    35
    <?php
    namespace MyProject\Model;
     
    /**
     * @Entity
     * @InheritanceType("JOINED")
     * @DiscriminatorColumn(name="discr", type="string")
     * @DiscriminatorMap({"commentable" = "Commentable", "article" = "Article", "event" = "Event"})
     * Rajouter ici relation one-to-many vers Comment
     */
    class Commentable
    {
        // ...
    }
     
    /** @Entity */
    class Article extends Commentable
    {
        // ...
    }
     
    /** @Entity */
    class Event extends Commentable
    {
        // ...
    }
     
     
    /** @Entity */
    /* Rajouter ici relation many-to-one vers Commentable
    */
    class Comment
    {
        // ...
    }

Discussions similaires

  1. Probléme Modélisation - Gestion des Commentaires
    Par Pioul dans le forum Schéma
    Réponses: 5
    Dernier message: 11/12/2008, 11h23
  2. Gestion des commentaires dans cellule
    Par INeedHelp dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/04/2008, 22h35
  3. Gestions associations dans l'héritage
    Par FranckRav dans le forum UML
    Réponses: 9
    Dernier message: 10/03/2008, 12h38
  4. [PhpDocumentor] Gestion des commentaires avec accents
    Par Nullos Oracle dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 18/09/2007, 12h24
  5. Gestion de commentaires sur site web
    Par Gui N. dans le forum Administration
    Réponses: 0
    Dernier message: 22/06/2006, 12h53

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