仅编辑嵌入式集合中的第一个实体

时间:2015-11-30 13:56:10

标签: symfony

我有一个名为Publisher的父实体和一个名为User且具有ManyToMany关系的子实体。

在发布商表单中,我想创建/编辑第一个用户,我实现了这样的目标:

$builder
  ->add('title')
  ->add('users', 'collection', array(
    'type' => new UserType(),
    'allow_add' => true,
  ))

在我的树枝模板中,我做了

            {{ form_row(edit_form.users.0.firstname) }}                 
            {{ form_row(edit_form.users.0.lastname) }}
            {{ form_row(edit_form.users.0.email) }}

这显然只有只有一个用户分配给发布者才有效,因为否则symfony也会尝试验证其他用户,其数据丢失。

有人可以给我一个提示,如何仅从发布者表单中编辑集合中的第一个用户项目吗?

2 个答案:

答案 0 :(得分:0)

您可以在显示firt用户后设置字段users“呈现”:

{{ form_row(edit_form.users.0.firstname) }}                 
{{ form_row(edit_form.users.0.lastname) }}
{{ form_row(edit_form.users.0.email) }}
{% do edit_form.users.setRendered %}

使用setRendered时,Symfony2不会尝试验证下一个用户。

答案 1 :(得分:0)

我通过为第一个用户引入getter和setter来解决使用Cerad解决方案的问题。

src/main/twirl/views

以及执行此操作的形式

  public function setFirstUser($user)
  {
    $this->users[0] = $user;

    return $this;
  }

  public function getFirstUser()
  {
    return $this->users[0];
  }

并在twig模板中调用firstUser的字段setRendered行只是压缩用户对象的其他属性。

$builder
  ->add('title')
  ->add('firstUser', new UserType())
编辑:由于Cerads关于SQL行的非确定性排序的反馈,我选择创建一个不动产“adminUser”,这是与连接到实体的第一个用户的OneToOne关系。