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 :

Pb de string et array avec les roles d'une user


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Points : 61
    Points
    61
    Par défaut Pb de string et array avec les roles d'une user
    Bonjour, je suis en train d'étudier Symfony et j'avance calcmement.
    Je bute sur un point précis.
    J'ai un un user qui a un role defini comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /**
         * @var string
         *
         * @ORM\Column(name="roles", type="string", length=15)
         */
        private $roles;
    Si je fait le getRoles comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function getRoles()
        {
                    return $this->roles = array();
        }
    Je ne visualise pas la liste des users :
    An exception has been thrown during the rendering of a template ("Notice: Array to string conversion").
    a cause du user.roles => par contre :
    dans Dumped Contents j'ai bien un roles: "ROLES_REDACTOR".

    Si je modifie le getRoles comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function getRoles()
        {
            return $this->roles;
        }
    j'ai bien ma liste mais je ne peux plus me connecter :
    Type error: Argument 4 passed to Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken::__construct() must be of the type array, string given, called in C:\kcc\vendor\symfony\symfony\src\Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider.php on line 94

    in vendor\symfony\symfony\src\Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken.php (line 32)
    * @param string $providerKey The provider key * @param (RoleInterface|string)[] $roles An array of roles * * @throws \InvalidArgumentException */ public function __construct($user, $credentials, $providerKey, array $roles = array())
    Je tourne en rond.

    Merci de votre aide

  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
    Le message est clair, tu veux insérer un array dans une chaîne string .
    Les rôles , surtout pour FOSUser , sont sous forme d'un array, donc pourquoi mettre rôle sous forme de string coté bdd ?
    Les rôles sont mieux gérés sous format array pour autoriser tel chose et empêcher d'autre..

  3. #3
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Points : 61
    Points
    61
    Par défaut
    Merci pour cette réponse mais comment faire car voici mon champ role dans l'entity User:
    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
       /**
         * @var string
         *
         * @ORM\Column(name="roles", type="string", length=15)
         */
        private $roles;
     
        /**
         * Set roles
         *
         * @param string $roles
         *
         * @return User
         */
        public function setRoles($roles)
        {
            $this->roles = $roles;
     
            return $this;
        }
     
        /**
         * Get roles
         *
         * @return string
         */
        public function getRoles()
        {
            return $this->roles = array();
        }

  4. #4
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Points : 61
    Points
    61
    Par défaut
    bonjour,
    J'ai modifié mon "roles" comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        /**
         * @ORM\Column(type="array")
         */
        private $roles;
     
        public function getRoles()
        {
            return $this->roles;
        }
     
        public function setRoles($role)
        {
            $this->roles = $role;
        }
    Maintenant lors de la connexion, j'ai ce message d'erreur :
    Type error: Argument 4 passed to Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken::__construct() must be of the type array, string given, called in C:\kcc\vendor\symfony\symfony\src\Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider.php on line 94
    Comment peut-on résoudre mon dysfonctionnement ?

  5. #5
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Points : 61
    Points
    61
    Par défaut
    Je viens de corriger mon erreur sur mon getRoles :
    public function getRoles()
    {
    return $this->roles = array();
    }
    nouvelle erreur mais je travaille dessus :
    Notice: unserialize(): Error at offset 0 of 14 bytes
    par contre un peu d'aide ne se refuse pas

  6. #6
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Points : 61
    Points
    61
    Par défaut
    Le dysfonctionnement continue :
    maintenant j'ai modifié mon entity User comme suit :
    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
       public function serialize()
        {
            return serialize(array(
                $this->id,
                $this->username,
                $this->email,
                $this->roles,
                $this->dateDeCreation
            ));
        }
     
        public function unserialize($serialized)
        {
            list (
                $this->id,
                $this->username,
                $this->email,
                $this->roles,
                $this->dateDeCreation,
                ) = $this->unserialize($serialized);
        }
    et je crée un utilisateur, mais je ne peux plus me connecter
    le message :

    Cette page ne fonctionne pas
    Impossible de traiter cette demande via kcc à l'heure actuelle.
    HTTP ERROR 500
    J'accede bien à mon formulaire et voici la page de connexion :

    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
    {% extends '@App/layout.html.twig' %}
     
    {% block body %}
        {% if error %}
            <div class="text-danger">Mauvais identifiants !</div>
        {% endif %}
     
        <form action="{{ path('login') }}" method="post">
            <div class="form-group">
                <label for="username">Pseudo</label>
                <input class="form-control" type="text" id="username" name="_username" value="{{ last_username }}" />
            </div>
            <div class="form-group">
                <label for="password">Mot de passe</label>
                <input class="form-control" type="password" id="password" name="_password" />
            </div>
     
     
            <div class="form-group">
                <button class="btn btn-default" type="submit">login</button>
            </div>
        </form>
    {% endblock %}

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2003
    Messages : 307
    Points : 378
    Points
    378
    Par défaut
    je pense que c'est parce que tu as dans on serialize un array (roles)

    as tu regarde la doc de sf : http://symfony.com/doc/current/secur..._provider.html

  8. #8
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Points : 61
    Points
    61
    Par défaut
    Merci jfsenechal, je vais étudier cette documentation.
    Je recommences depuis le début car à force de modification, je m'y perds.

  9. #9
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2016
    Messages : 95
    Points : 61
    Points
    61
    Par défaut
    Le dysfonctionnemet est résolu.
    voici la solution trouvée :
    Voici le get roles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       /**
         * Get roles
         *
         * @return string
         */
        public function getRoles()
        {
            return [$this->roles];
        }
    et pour l'afficher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <td>{{ user.roles[0] }}</td>
    Merci de votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme avec les roles
    Par serna dans le forum Débuter
    Réponses: 1
    Dernier message: 08/03/2017, 15h20
  2. [2.x] formulaire de type choice avec les roles securité de symfony
    Par miltone dans le forum Symfony
    Réponses: 12
    Dernier message: 20/04/2015, 21h29
  3. array avec les resultats de 2 colonnes
    Par voyageurdumonde dans le forum Langage
    Réponses: 5
    Dernier message: 28/03/2012, 01h31
  4. Réponses: 9
    Dernier message: 08/11/2007, 13h33
  5. [C#] Travailler efficacement avec les panels dans une forme
    Par WwiloO dans le forum Windows Forms
    Réponses: 8
    Dernier message: 27/06/2005, 15h33

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