我有 2 个实体 - 用户和组。它们具有多对多关系,组用于存储用户的角色。
我正在尝试通过添加集合来制作用户编辑表单,我希望能够通过从下拉列表中选择来添加新角色(仅限于数据库中已有的内容)
用户类型.php:
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username')
->add('email')
->add('forename')
->add('surname')
->add('isActive')
->add('joinDate', 'date', array('input' => 'datetime', 'format' => 'dd-MM-yyyy'))
->add('lastActive', 'date', array('input' => 'datetime', 'format' => 'dd-MM-yyyy'))
->add('groups', 'collection', array(
'type' => new GroupType(),
'allow_add' => true,
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Sfox\CoreBundle\Entity\User'
));
}
}
和 GroupType.php:
class GroupType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('role');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
"data_class" => 'Sfox\CoreBundle\Entity\Group'
));
}
}
这会在基本文本框中显示表单中的角色,但如果我在表单中添加一个条目,它会将一个新条目级联到 Groups 中,如果我要编辑一个条目,它会更改底层 Group 数据。
我尝试制作 GroupSelectType.php:
class GroupSelectType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('role', 'entity', array('class'=>'SfoxCoreBundle:Group', 'property'=>'name'));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
"data_class" => 'Sfox\CoreBundle\Entity\Group'
));
}
}
将该字段添加为“实体”类型,这将显示正确的选择框(但使用默认值)我似乎无法将其绑定到 UserType 表单!
我想要表单做的就是修改用户实体中的底层“组”ArrayCollection。
有谁知道我怎么能做到这一点?