【问题标题】:Symfony2: Check the checkboxes in a formSymfony2:选中表单中的复选框
【发布时间】:2012-10-28 09:24:05
【问题描述】:

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

在我看来,我应该为每个现有的从属关系设置一个复选框,并且如果该人已经拥有该从属关系,则应选中该复选框。

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

下面是两张表的样子:

Person
    id
    firstname
    lastname
    ...
    affiliations

Affiliation
    id
    affiliation

PersonAffiliation
    id
    person_id
    affiliation_id

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

【问题讨论】:

  • 如何为public function hasAffiliation($affiliation) 之类的人添加一个函数,然后在循环访问关联时在树枝中,只需调用{% if person.hasAffiliation(affiliation) }%....
  • @mogoman,感谢您的回复。我有这个想法,但我遇到的问题是在树枝中,我有 {% for aff in form.affiliations %} 所以附属关系是一个表单对象,我不知道如何以及是否可以获取字符串或从属关系对象。

标签: database symfony checkbox entity


【解决方案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) }}

【讨论】:

  • 非常感谢mogoman,但是现在如何检查那些复选框?
  • 啊 - 我明白这个问题。您有“代理”实体(PersonAffiliation)而不使用多对多单向关系(docs.doctrine-project.org/en/2.0.x/reference/…)是否有原因。然后表单将毫无问题地工作。
  • 其实我的数据库就是这样创建的,但是你认为我可以使用manytoMany并且negliate代理表PersonAffiliation吗?
  • 谢谢,我马上试试,但是有一点不明白,那我要怎么检查对应的从属关系呢?还有怎么勾选呢?
  • 我相信该对象没有保存在那里,因为您在控制器中运行 form->createView。你可以做的是(在你的控制器中)制作一个索引附属列表$affliations[$aff1->id] = $affiliation等 - 然后在树枝中{{ affiliations[aff.vars.value] }}
猜你喜欢
  • 2014-07-09
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多