2016-04-19 17 views
1

Zunächst einmal bin ich Französisch, also bitte ich um Verzeihung für mein schlechtes Englisch.Symfony3 - FOSUserBundle - Rollen Attribution

Ich komme zu dir, weil ich hier bin, ich beginne mein erstes Symfony3 Projekt! Und ich habe mein erstes Problem: Ich möchte FOSUserBundle verwenden, um meine Benutzer zu verwalten, aber ich möchte nicht, dass sich Besucher registrieren können. Ich möchte, dass der Administrator die Benutzer erstellt (ich denke, ich kann es tun), aber ich brauche das im Benutzererstellungsformular, der Administrator kann dem Benutzer eine Rolle zuweisen. (Nur eine Rolle)

Hier ist mein Problem: Symfony3 hat sich in diesem Punkt stark verändert und die Lösungen, die ich gefunden habe, passen nicht mehr zusammen. Eigentlich möchte ich ein Feld CollectionType in der/registration von FOSUserBundle hinzufügen und diese Registrierungsseite unter/admin/registration ablegen, damit die Administratoren neue Benutzer anlegen können. Ich werde die Registrierungsumleitung ändern, damit die Website nicht denkt, dass der Administrator ein Besucher ist, der das Formular verwendet. Ist das eine gute Idee? Nun, ich brauche jemanden, der mir einfach den Code des "-> add ('role')" gibt. Bitte: D. Denn es ist wirklich anders als das, was in Symfony2 verwendet wurde.

Also, was ich will, ist so etwas wie:

// \FOS\UserBundle\Form\Type\RegistrationFormType.php 


$builder ->add('roles', CollectionType::class, array(
       'entry_type' => TextType::class, 
       'entry_options' => array(
        '/* CHOICES */' => array(
         /*List of Roles from security.yml*/ 
        ) 
       ) 
      ); 

Danke an alle!

Antwort

2

Sie haben choices form type

Ein Beispiel verwenden, um die Rollen in Symfony zu bekommen:

In Sie Controller

// ... your function 
$user = new User(); 
$roles = $this->container->getParameter('security.role_hierarchy.roles'); 
$myForm = $this->createForm(new UserType($roles), $user); 

$builder->add('roles', 'choice', array(
     'choices' => $this->flattenArray($this->roles), 
)); 

// ... your code 

// transform symfony roles into one dimensional array. 
public function array_flatten($array) 
{ 
    if (!is_array($array)) { 
     return FALSE; 
    } 
    $result = array(); 
    foreach ($array as $key => $value) { 
     if (is_array($value)) { 
      $result = array_merge($result, array_flatten($value)); 
     } else { 
      $result[$key] = $value; 
     } 
    } 
    return $result; 
} 
+0

Hey! Danke für deine Antwort. Muss ich einen neuen Controller, Formular und Ansichten erstellen oder kann ich noch die FOSUserBundle RegistrierungsFormType.php Datei verwenden? Denn es scheint, dass dein Code nur funktioniert, wenn ich ein ganz neues Registrierungsformular erstelle, oder? – shqnks

+0

np, wenn es Ihre Antwort gelöst hat, markieren Sie als gelöst;) –

+0

Edit: http://StackOverflow.com/Help/Someone-answers @shqnks –

Verwandte Themen