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)
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.
Partager