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 :

Demande d'infos sur getRoles de User quand users et roles en bdd


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 64
    Points : 45
    Points
    45
    Par défaut Demande d'infos sur getRoles de User quand users et roles en bdd
    Bonjour à tous,

    Suite à ma découverte de Symfony j'ai voulu créer une application avec users et roles en base de données. J'ai suivi les documentations, docs et autres infos que j'ai pu trouvé à ce sujet.

    Actuellement le problème sur lequel je suis tombé est après l'autentification. Lorsque je veux afficher une page j'obtiens ce message d'erreur provoqué par la classe RoleHierarchy:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call to a member function getRole() on a non-object
    Mes classes User et Role fonctionnent bien et sont bien liées entre elles sans souci. Elles possèdent les bonnes interfaces, implémentent les bonnes fonctions.

    Ma classe User (en version réduite, j'ai enlevé ce qui n'est pas important):
    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
    36
    37
    38
    39
    40
    41
    42
    43
    class User implements UserInterface
    {
        #region [Attributes]
        /**
         * @var integer
         *
         * @ORM\Id
         * @ORM\Column(name="id", type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @var string
         *
         * @ORM\Column(name="call_sign", type="string", length=100)
         */
        private $callSign;
     
        /**
         * @var string
         *
         * @ORM\Column(name="password")
         */
        private $password;
     
        /**
         * @var ArrayCollection
         *
         * @ORM\ManyToMany(targetEntity="Role", inversedBy="users")
         * @ORM\JoinColumn(name="role_id", referencedColumnName="id")
         */
        private $roles;
     
        /**
         * Get array of string roles
         *
         * @return array
         */
        public function getRoles()
        {
            return $this->roles;
        }
    Et ma classe Role :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    class Role implements RoleInterface
    {
        #region [Attributes]
     
        /**
         * @var integer
         *
         * @ORM\Id
         * @ORM\Column(name="id", type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @var string
         *
         * @ORM\Column(name="role", type="string", length=100)
         */
        private $role;
     
        /**
         * @var \Doctrine\Common\Collections\Collection
         *
         * @ORM\ManyToMany(targetEntity="User", mappedBy="roles")
         */
        private $users;
     
        #endregion
     
        /**
         * @param string $role
         */
        public function __construct($role)
        {
            $this->users = new ArrayCollection();
        }
     
        #region [Getters & Setters]
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set role
         *
         * @param string $role
         * @return Role
         */
        public function setRole($role)
        {
            $this->role = $role;
     
            return $this;
        }
     
        /**
         * Get role
         *
         * @return string 
         */
        public function getRole()
        {
            return $this->role;
        }
    J'ai résolu le problème en modifiant la fonction getRoles de ma classe User de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /**
         * Get array of string roles
         *
         * @return array
         */
        public function getRoles()
        {
            $role_name_array = array();
     
            foreach($this->roles as $role)
                array_push($role_name_array, $role->getRole());
     
            return $role_name_array;
        }
    Bon au final cela fonctionne mais je voulais savoir si j'avais mal fait quelque chose. Le rustinage, ça fonctionne mais c'est moins propre.

    Merci d'avance à ceux qui auront répondu !

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    Pour l 'exception au début : tu fais appel a l'utilisateur connecté et ses rôles alors que t'es plus connecté
    donc getRole() n'est plus appelée depuis un objet (utilisateur ) .

    Mes questions concernant le mapping :
    - si tu supprime un rôle x à partir du backend que va se passer pour les utilisateurs ayant ce rôle ?
    - de même réciproquement si tu veux supprimer un utilisateur ?


    Je propose aussi un attribut de type date si tu veux la date de l'inscription , last log etc ..

Discussions similaires

  1. Demande d'info sur MySQL 3.23.58
    Par gobs dans le forum Installation
    Réponses: 5
    Dernier message: 25/01/2006, 12h52
  2. demande d'infos sur le composant IBDataSet
    Par seb8810 dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/01/2006, 15h16
  3. [Débutant] Demande d'info sur OpenGL
    Par SkyDev dans le forum OpenGL
    Réponses: 2
    Dernier message: 01/03/2005, 23h58
  4. Demande d'info sur treeview
    Par Anaxagore dans le forum IHM
    Réponses: 6
    Dernier message: 28/08/2003, 18h27

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