Symfony2:选中表单中的复选框

时间:2012-11-08 07:48:19

标签: database symfony checkbox entity

我有3个实体:Person,Affiliation和PersonAffiliation。 可以编辑此人,可以添加或删除附属关系。

在我看来,我应该为每个现有的联盟设置一个复选框,如果该人已经具有此联盟,则应选中复选框。

我知道如何在视图(树枝)中显示所有从属关系,但我不知道如果该人已经具有此关联,我将不知道如何选中复选框。

以下是两个表的外观:

Person
    id
    firstname
    lastname
    ...
    affiliations

Affiliation
    id
    affiliation

PersonAffiliation
    id
    person_id
    affiliation_id

现在,我的问题是:是否有可能使用控制器和视图(twig)来执行此操作,或者唯一的可能是使用Javascript(使用JQuery)?

1 个答案:

答案 0 :(得分:1)

不是使用代理类,而是像这样排列对象:

Person
    id
    ... as before
Affiliation
    id
    .. as before
-- remove PersonAffiliation --

但将此关系添加到您的Person类

/**
 * @ManyToMany(targetEntity="Affiliation")
 * @JoinTable(name="person_affiliation",
 *      joinColumns={@JoinColumn(name="person_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="affiliation_id", referencedColumnName="id")}
 *      )
 */

您可以在表单构建器中完成所有操作:

    $builder
        ->add('person')
        ->add(
            'affiliation',
            'entity',
            array(
                'class'         => 'AcmeDemoBundle:Affiliation',
                'query_builder' => function($em) { return $em->createQueryBuilder('p')->orderBy('p.id', 'ASC'); },
                'property'    => 'affiliation',
                'multiple'    => true,
                'expanded'    => true,
                'required'    => false
            )
        );

然后只需使用

渲染表单
{{ form_widget(form) }}