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 :

Duplication attributs private protected


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Par défaut Duplication attributs private protected
    Bonjour,

    Je fais face à une situation on ne peut plus bizarre en utilisant Symfony, Doctrine et une base de données MySql.

    Voici le contexte : une classe User (qui implémente UserInterface), une classe Role (qui implémente RoleInterface) et une classe Statut générées via l'outil de génération d'entité de doctrine (en ligne de commande)
    => php app/console doctrine:generate:entity

    La classe User possède, entre autre du nom, prenom, username et password, un attribut roles qui est un tableau de Role et un attribut statut de type Statut (mais cet attribut ne sert pas à grand chose dans le contexte).
    La classe Role possède un attribut nom qui est le nom du role, tout simplement, un attribute entrepot de type booléen et un attribut roleParent de type Role (car il y a une notion de hérarchie dans ma conception).

    Tout mes attributs sont au départ private. Je peuple la base avec plusieurs User et plusieurs Role. Jusque-là tout va bien.

    Seulement suite à des problèmes de serialization, je passe mes attributs private à protected. Par ailleurs, pour rester plus cohérent avec RoleInterface, je renomme mon champs nom de la classe Role en champs role.
    J'exécute la commande : php app/console doctrine:schema:update --force
    pour appliquer les changements à ma BD.

    Tout cela se passe en encombre et continue mon projet. Viens le moment où je mets un formulaire de connexion avec username et password. Après l'utilisateur se soit connecté, je veux récupérer les rôles de ce dernier via la session. Et c'est là où les choses se gâtent : les rôles sont tous à null quelque soit l'utilisateur. En faisant un var_dump du champs roles du User qui vient de se connecter, je me rend compte qu'il y a eu une duplication des champs de ma classe (voir image)

    Nom : bug_php.jpg
Affichages : 108
Taille : 134,1 Ko

    Comment cela est possible ?? C'est sûrement un problème avec l'ORM (Doctrine) qui doit garder dans une mémoire de je ne sais où les noms des attributs du premier mapping (notamment le champs 'nom' de la classe Role) mais en plus il garde la visibilité des attributs !

    Je suis en phase d'apprentissage de Symfony (et Doctrine par la même occasion) donc il se peut que l'explication soit très simple mais je trouve que le comportement est vraiment étrange et peut être très handicapant sur des projets pour conséquent.

    Cordialement

    PS : je précise que peu importe le pourquoi du comment d'une telle architecture : le fait est qu'elle est ce qu'elle est et que le but de ce post est de comprendre le pourquoi du comment de ce comportement dans ce contexte.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Par défaut
    PS : je précise que peu importe le pourquoi du comment d'une telle architecture : le fait est qu'elle est ce qu'elle est et que le but de ce post est de comprendre le pourquoi du comment de ce comportement dans ce contexte.
    Je précise que peut être qu'on a pas envie de prendre le temps de comprendre une architecture/pratique non normale.
    Je suppose que si tu demandes a ton garagiste de réparer ta voiture que tu as faite à la main, il va en chier (ou te rire au nez) surtout si t'as fait ca en utilisant des pièces pour d'autres besoins que ce à quoi elles sont destinées.

    Seulement suite à des problèmes de serialization, je passe mes attributs private à protected. Par ailleurs, pour rester plus cohérent avec RoleInterface, je renomme mon champs nom de la classe Role en champs role.
    Je te propose de créer tes propres objets que tu mets en session, plutôt que d'utiliser des objets doctrine.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Par défaut
    C'est exactement le genre de réponse auquel je m'attendais et qui n'apporte pas grand chose à la problématique amenée : je ne demande pas une solution alternative. Je demande de l'aide pour essayer de comprendre ce phénomène ou ce comportement.

    Ceux qui n'ont qui pas envie d'essayer de comprendre l'architecture n'ont par conséquent pas envie de comprendre le pourquoi du comportement de Doctrine (ou PHP). Et donc n'ont pas besoin de poster.

    Cependant, étant donné qu'il s'agit d'un forum d'entre-aide, toute solution alternative est la bienvenue pour les autres personnes qui tomberaient sur ce topic (et ayant un problème similaire au mien) mais qui n'auraient pas l'envie ou le temps de comprendre le comportement.

Discussions similaires

  1. differences static final - private protected
    Par fantomas261 dans le forum Langage
    Réponses: 2
    Dernier message: 27/05/2007, 12h24
  2. feinter l'attribut private lors de l'heritage
    Par LittleBean dans le forum Langage
    Réponses: 11
    Dernier message: 24/04/2007, 18h04
  3. attribut private d'une classe
    Par poukill dans le forum C++
    Réponses: 7
    Dernier message: 24/07/2006, 11h50
  4. Public Private Protected
    Par Sabrina_of_darkness dans le forum Langage
    Réponses: 1
    Dernier message: 25/03/2006, 22h21
  5. Private - Protected
    Par Argonz dans le forum C++
    Réponses: 11
    Dernier message: 06/08/2004, 16h21

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