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

Doctrine2 PHP Discussion :

Héritage d'entité pour multilangue


Sujet :

Doctrine2 PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut Héritage d'entité pour multilangue
    Bonjour à tous !

    Me voilà actuellement en cours de création d'un bundle d'actualités tout simple pour un site web.

    Ma base de donnée est en gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    actualites(id, date, image)
    actualites_fr(titre, texte)
    actualites_en(titre, texte)
    Vous comprenez l'intérêt donc, qui est d'ajoutez autant de langue que l'on veut sans avoir à modifier la structure de la table de base, actualites.

    Mais concrètement je n'arrive pas à le construire. Sachant que TOUTES LES TABLES doivent être rempli.
    Lors de la création d'une actualité, donc a un onglet "langue" avec les langues existante (ça je le fais, aucun soucis), dans cet exemple "Français" et "Anglais" avec les champs du formulaire, donc obligation d'être rempli.

    Pourriez-vous me dire comment le faire en gros avec Symfony2 ?

    Merci d'avance!

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Bonjour,

    je ne comprend pas vraiment ta modélisation, si tu fais un héritage entre Actualite et Actualite_fr, cela signifie qu'une actualité est monolangue (un id unique pour une actualité et une traduction donné).
    Par conséquent ton formulaire est mappé à une entité Actualite_fr ou Actualite_en, donc avec un seul champ de saisie (en français ouen anglais).

    si une actualité a plusieurs traductions la modélisation serait plutôt:
    Actualité
    columns:
    id
    date
    image
    oneToMany:
    traductions (classe Traduction)

    Traduction:
    columns:
    codeLang (NB contrainte d'unicité sur codeLang/actualité)
    titre
    texte
    manyToOne:
    actualité (classe Actualité)
    tu peux aussi regarder si les extensions Doctrine peuvent répondre à tes besoins:
    http://symfony.com/doc/current/cookb...xtensions.html

  3. #3
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut
    Effectivement en relisant mon post je crois qu'il y a un gros soucis de modélisation ^^'

    J'ai pris part de tes remarques et donc adapté ma base.

    J'aimerais donc faire ça :

    Mon Namespace c'est Nowis, mon bundle est ActualiteBundle

    En terme de base de donnée, il faut arriver à ça :

    actualites(id, image, ordre, actif)
    actualites_traduction(id_actualite, id_langue, titre, texte)
    langue(id, libelle, extension)

    Evidemment, mon bundle ActualiteBundle devra contenir actualites et actualites_traduction mais je me demande quant à langue.
    Il est logique que mon application ne contiennent pas que des actualites, et il faut également traduire les autres contenus.
    Donc je créerais bien un langueBundle pour pouvoir depuis l'admin ajouter/modifier/supprimer des langues. Et bien sur les lier à d'autre contenu...

    Est-ce la bonne logique ?
    Pourriez-vous m'orienter sur les choses "à penser"/à ne pas faire ?

    Merci d'avance!

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    pour ma part j'avais fait une application avec une entité Langue (id, code, libellé) mais au final je me suis rendu compte que cette entité avait peu de consistance
    ->le code langue est forcément unique dans la table (donc il fait doublon avec id)
    ->le libellé peut être retrouvé coté applicatif (par la méthode statique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \Symfony\Component\Locale\Locale::getDisplayLanguage($codeLangueAtraduire,$langueDeTraduction)
    );

    au final on peut s'en sortir en ne stockant que des codes langues au format normalisé

    Pour moi stocker des codes langues utilisable dans ta config ou dans une méthode statique de l'entité Actualite me semblerait suffisant, il suffira de mettre à jour le code source de l'appli si tu veux ajouter des langues

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Actualite{
    public static getAvailableCodeLangues(){
      return array('fr','en');
    }
    }

  5. #5
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut
    Effectivement c'est vraiment pas con ^^'

    J'utilise de toute façon les code langue normalisé (dans ma table, c'est "extension").

    Finalement c'est plutot bien de pas avoir à gérer ceci !

    Je te remercie pour cette lumière.

  6. #6
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut
    Je me permets de te reposer une petit question qui peut paraître idiote mais qui me prend la tête depuis tout à l'heure.

    J'ai donc créé :
    Entity/Actualites
    Entity/ActualitesTraduction (relation propriétaire d'actualité)
    Controler/ActualitesController
    Form/ActualitesType et ActualitesTraductionType
    Form/ActualitesHandler et ActualitesTraductionHandler

    Dans ma class Actualites, j'ai défini comme tu as dit le getAvailableCodeLangues

    A partir de là j'aimerais créer mon formulaire, qui doit me générer les champs suivant :

    Actualites : dateDebut, dateFin, Actif (par exemple).
    Jusque là pas de soucis.
    Mais je dois "boucler" sur mes getAvailableCodeLangues pour m'afficher autant de fois necessaire le ActualitesTraduction (toutes les langues étant nécessaire à la validation de l'actualité).
    Et c'est la que ça coince.

    Car d'habitude j'utilise name="titre['fr']" pour mes inputs, mais là je ne peux pas apparemment car Symfony me dit qu'il n'y a pas de méthode getTitreFr... Forcément c'est getTitre avec comme code_langue FR... mais ça je n'y arrive pas.

    Aurais-tu une piste à m'indiquer ?

    Je te remercie par avance.

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/05/2011, 10h10
  2. [MCD] Héritage et entité faible
    Par Shankara dans le forum Schéma
    Réponses: 7
    Dernier message: 26/11/2009, 02h39
  3. [MCD] une entité pour UN employeur ?
    Par Goundy dans le forum Schéma
    Réponses: 4
    Dernier message: 01/04/2008, 20h25
  4. Plusieurs entités pour une même relation
    Par Mandotnet dans le forum Schéma
    Réponses: 1
    Dernier message: 08/04/2007, 19h13

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