我有一个名为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也会尝试验证其他用户,其数据丢失。
有人可以给我一个提示,如何仅从发布者表单中编辑集合中的第一个用户项目吗?
答案 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关系。