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 werdenExpected 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
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
Aktualisieren Sie Ihre Antwort –
Antwort ist aktualisiert – padhie