2017-12-05 3 views
1

Ich benutze Symfony3.3 und möchte ein Formular für die Admin-Administration erstellen. Der Benutzer sollte eine Gruppe haben und die Gruppe sollte die Rollen für den Backend-Zugriff haben. Das Formular für Gruppen (Name und Rollen) habe ich fertig und das Formular für die Admins (Name, Passwort ...) ist fertig. Der Administrator wird die Gruppe finden und haben. Wenn ich den Admin lade, habe ich die arraycollection mit den Gruppen.Symfony3 fosuserbundle Formular für Admin mit Gruppe

Hier Admin meine Klassen:

class Admin extends BaseUser 
{ 
    /** 
    * @ORM\Id() 
    * @ORM\Column(name="idAdmin", type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @var string 
    * @ORM\Column(type="string", length=255, options={"default":NULL}) 
    */ 
    protected $style; 

    /** 
    * @ORM\ManyToMany(targetEntity="AdminBundle\Entity\AdminGroup") 
    * @ORM\JoinTable(
    *  name="admin_has_group", 
    *  joinColumns={ 
    *   @ORM\JoinColumn(name="idAdmin", referencedColumnName="idAdmin") 
    *  }, 
    *  inverseJoinColumns={ 
    *   @ORM\JoinColumn(name="idGroup", referencedColumnName="idGroup") 
    *  } 
    *) 
    */ 
    protected $groups; 

    /** 
    * @return string 
    */ 
    public function getStyle() 
    { 
     return $this->style; 
    } 

    /** 
    * @param string $style 
    */ 
    public function setStyle($style) 
    { 
     $this->style = $style; 

     return $this; 
    } 

    public function setGroups($groups) 
    { 

     $this->groups = $groups; 

     return $this; 
    } 

    public function getGroups() 
    { 
     return $this->groups; 
    } 
} 

Gruppen

class AdminGroup extends BaseGroup 
{ 
    /** 
    * @var int 
    * @ORM\Id 
    * @ORM\Column(name="idGroup", type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * Group constructor. 
    * 
    * @param string $name 
    * @param array $roles 
    */ 
    public function __construct($name = '', $roles = array()) 
    { 
     parent::__construct($name, $roles); 
    } 
} 

Form Generation

$admin = $this->getDoctrine()->getRepository(Admin::class)->find(1); 
$admingroupList = $this->getDoctrine()->getRepository(AdminGroup::class)->findAll(); 
$form = $this->createFormBuilder($admin) 
    ->add("username", TextType::class) 
    ->add('plainPassword', PasswordType::class, $passwordSettings) 
    ->add(
     'groups', ChoiceType::class, [ 
     'required' => false, 
     'multiple' => true, 
     'choices' => $admingroupList, 
    ]) 
    ->add('save', SubmitType::class, ['label' => 'Save'])->getForm()->createView(); 

speichern Form

$form->handleRequest($request); 
if ($form->isSubmitted() && $form->isValid()) { 

    $user = $form->getData(); 

    $em->persist($user); 
    $em->flush(); 

    .... 
} 

Das erste Problem ist, dass ich in der Übersicht nur die IDs in der Auswahl anzeigen. Das zweite Problem ist, dass ich die Form (mit ausgewählten Gruppen) symfony einreichen abgestürzt mit der folgenden Meldung

Call to a member function contains() on array

Ich versuche, die Gruppenliste zu einem normalen Array zu konvertieren werden sie an der die Daten

speichert Absturz gebracht werden

Expected argument of type "FOS\UserBundle\Model\GroupInterface", "integer" given

ich weiß nicht, dass ich sould ein einfaches symfony Formular mit den Admin-Daten und Gruppenauswahl auszukommen ... ich nicht mit fosuserbundle für ein Formular kein Beispiel finden ...

jemand Haben Sie eine Idee, was ich kann ohne zu manipulieren Fosusbundle oder der Symfonycode?

Wenn Sie mehr brauchen werden, sagen Sie mir, mit einem Teil :)


Schnitt 10.12.17 Ich versuche, die ChoosenArray in dieses Format

$list = [ 
'user' => 0, 
'admin' => 1 
]; 

zu konvertieren, aber als es gebrochen wird bei

$form->handleRequest($request); 

mit dem Fehler:

Expected argument of type "FOS\UserBundle\Model\GroupInterface", "integer" given

Antwort

0

Ich glaube nicht, dass die Daten aus

zurück
$admingroupList = $this->getDoctrine()->getRepository(AdminGroup::class)->findAll(); 

Wird arbeiten, wie Sie es auch wollen. choices will so etwas wie dieses

'choices' => [ 
    'Admin' => 'admin', 
    'User' => 'user' 
] 

Wo der Schlüssel des Arrays ist der Name der Benutzer sieht, und der Wert des Feldes ist der Wert in der <option> verwendet.

Sie müssen wahrscheinlich das $admingroupList Array manipulieren, um das obige Demo-Array nachzuahmen. Oder schreiben Sie Ihre eigene Abfrage in AdminGroup Repo, um ein vorformatiertes Array zur Verwendung mit einem Symfony-Formular zurückzugeben.

+0

Ich versuche, was Sie meinen, das Array war Displayname als Arraykey und Option-Wert als Arrayvalue, aber dann wird es bei abgestürzt '' ' $ Form-> HandleRequest ($ Anfrage); '' ' weil Symfony versuchen, der Methode den numerischen Wert zu geben, der eine Liste der Objekte benötigt ... – padhie

+0

Aktualisieren Sie Ihre Antwort –

+0

Antwort ist aktualisiert – padhie

Verwandte Themen