Symfony2 Formbuilder中的另一个实体

时间:2015-09-06 12:38:48

标签: symfony entity formbuilder

我遇到了问题/理解问题。

我有3个数据库表 user,usergroup和user2usergroup

外国字段: user.id => user2usergroup.user_id user2usergroup.group_id => usergroup.id

所以现在我想生成并编辑我的用户对象并获得与我的formbuilder的关系。

我尝试了一些想法并寻求帮助。

这不是真正的状态:

控制器:

/**
 * creates user form
 * @param users $entity
 * @param string $sUrl
 * @return Form
 */
public function createUserForm(users $entity, $sUrl){
    $form = $this->createForm(new userType(), $entity, array(
        'action'    => $this->generateUrl($sUrl),
        'method'    => 'POST',
        'groups'    => $this->getUserGroups()
    ));
    return $form;
}

formbuilder

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options){
    $groups = $options['groups'];

    $builder
        ->add('enabled','checkbox',array(
                'required'  => false))
        ->add('locked','checkbox',array(
                'required'  => false))
        ->add('username','text',array(
                'required'  => true))
        ->add('email','email',array(
                'required'  => true))
        ->add('password','password',array(
                'required'  => true))
        ->add('roles', 'choice', array(
                    'choices'  => array('ROLE_ADMIN' => 'Admin', 'ROLE_USER' => 'Benutzer'),
                    'required' => true,
                    'multiple' => true
                ))
        ->add('groups','entity',array(
            'class' => 'UniteUserBundle:usergroup',
            'query_builder' => function(EntityRepository $er){
                    return $er->findAll();
                },

        ))
        ->add('save','submit')
        ;

}

也许你可以帮助我理解 - 如何将所有组添加到表单中 - 如何编辑用户并查看他所在的组(编辑视图) - 我如何将我在用户表单中选择的组持久保存到user2usergroup

非常感谢我的朋友=)

1 个答案:

答案 0 :(得分:0)

要显示用户所属的组并不困难:

{% for usergroup in entity.getUserGroups() %}
    <li>{{ usergroup.name }}</li>
{% endfor %}

要在USER表单中编辑它们会更复杂,因为您正在编辑一个用户,但此用户可以是零个,一个或多个组。这意味着可以编辑和删除列表中的每个组,并且可以添加新组。

对于这种情况,您可以使用Collection field type。在this article中,您可以逐步阅读如何使用它。