Symfony2: obtention de la liste des rôles d'utilisateur dans FormBuilder
Je suis en train de faire un formulaire pour la création d'un utilisateur, et je veux donner à un ou plusieurs rôles à un utilisateur lorsque je de lui créer.
Comment puis-je obtenir la liste des rôles définis dans security.yml
?
Voici mon générateur de formulaire à l'instant:
public function buildForm(FormBuilder $builder, array $options)
{
parent::buildForm($builder, $options);
//add your custom fields
$user = new User();
$builder->add('regionUser');
$builder->add('roles' ,'choice' ,array('choices' => $user->getRolesNames(),
'required' => true,
));
}
et dans User.php
public function getRolesNames(){
return array(
"ADMIN" => "Administrateur",
"ANIMATOR" => "Animateur",
"USER" => "Utilisateur",
);
}
Bien sûr, cette solution ne fonctionne pas, parce que roles
est défini comme une image bitmap dans la base de données, donc le choices
liste ne peut pas être créé.
Merci d'avance.
source d'informationauteur Gabriel Theron
Vous devez vous connecter pour publier un commentaire.
security.role_hierarchy.roles
conteneur paramètre définit le rôle de la hiérarchie comme un tableau. Vous pouvez généraliser pour obtenir la liste des rôles définis.Vous pouvez obtenir une liste de accessible rôles de cette méthode:
Il semble renvoyer tous les rôles accessible à partir de rôles dans la gamme
$roles
paramètre. C'est un service interne de Symfony, dont l'ID estsecurity.role_hierarchy
et n'est pas public (vous devez explicitement de le passer comme paramètres, il n'est pas acessible à partir du Conteneur de Services).Pour une représentation correcte de votre rôle, vous avez besoin de la récursivité. Les rôles peuvent s'étendre à d'autres rôles.
- Je utiliser pour l'exemple le suivant rôles en matière de sécurité.yml:
Vous pouvez obtenir ces rôles avec:
Un exemple avec la récursivité:
La sortie:
Vous pouvez faire un service pour cela et d'injecter de la "sécurité.role_hierarchy.les rôles de" paramètre.
Définition de la prestation:
Classe De Service:
Vous pouvez obtenir les rôles dans votre contrôleur comme ceci:
Dans Symfony 3.3, vous pouvez créer un RolesType.php comme suit:
Puis l'ajouter à l'écran comme suit:
Important est que chaque rôle doit également être contenue, par exemple:
ROLE_ADMIN: [ROLE_ADMIN, ROLE_USER]
Dans Symfony 2.7, dans les contrôleurs, vous devez utiliser $this->getParameters() pour obtenir les rôles :
Ce n'est pas exactement ce que vous voulez, mais il rend votre exemple de travail:
Mais en ce qui concerne l'obtention de votre Rôles à partir d'une entité, peut-être que vous pouvez utiliser entité référentiel des trucs pour interroger la base de données.
Ici est un bon exemple pour obtenir ce qu'il veut à l'aide de la queryBuilder dans l'entité de référentiel:
http://inchoo.net/tools-frameworks/symfony2-entity-field-type/
Si vous avez besoin pour obtenir tous hérité des fonctions de rôle:
Ensuite appeler cette functon:
$this->getRoles('ROLE_ADMIN');
C'est de loin la meilleure façon que j'ai trouvé pour obtenir ou définir ce que je veux à partir de fichiers de configuration.
Bon courage
Voici ce que j'ai fait:
FormType:
Dans l'entité:
Veuillez ne fournir des commentaires... j'ai utilisé quelques suggestions d'autres réponses, mais j'ai toujours l'impression que ce n'est pas la meilleure solution!