我使用Symfony3.3并希望为管理员制作表单。用户应该有一个组,组可以具有后端访问的角色。 我完成的组(名称和角色)的表单和管理员的表单(名称,密码......)也完成了。 管理员将找到并拥有该组。如果我加载管理员,则它包含带有组的arraycollection。
这是我的课程 管理员:
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;
}
}
基
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);
}
}
表单生成
$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();
保存表单
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user = $form->getData();
$em->persist($user);
$em->flush();
....
}
第一个问题是我在概述中只显示了选择中的id。 第二个问题是我提交表格(包括选定的组)symfony与以下消息一起崩溃
调用数组
上的成员函数contains()
我尝试将组列表转换为普通数组,它们将在保存数据时崩溃
类型" FOS \ UserBundle \ Model \ GroupInterface","整数"的预期参数给定
我不知道我可以用管理数据和组选择制作一个简单的symfony表单...我找不到任何带有fosuserbundle的表单的例子......
如果不操纵fosuserbundle entites或symfonycode,请有人知道我能做些什么吗?
如果您需要更多来源,请告诉我部分:)
编辑10.12.17 我尝试将ChoosenArray转换为这种格式
$list = [
'user' => 0,
'admin' => 1
];
但是它会被打破
$form->handleRequest($request);
错误:
类型" FOS \ UserBundle \ Model \ GroupInterface","整数"的预期参数给定
答案 0 :(得分:0)
我不认为从
返回的数据 $admingroupList = $this->getDoctrine()->getRepository(AdminGroup::class)->findAll();
也可以按你的意愿工作。 choices
想要这样的东西
'choices' => [
'Admin' => 'admin',
'User' => 'user'
]
数组的键是用户看到的名称,数组的值是<option>
中使用的值。
您可能需要操纵$admingroupList
数组来模仿上面的演示数组。或者在AdminGroup Repo中编写您自己的查询,以返回预先格式化的数组,以便与Symfony表单一起使用。