Forms Symfony动态EntityType数据属性

Forms Symfony动态EntityType数据属性,forms,symfony,Forms,Symfony,我有一个简单的symfony表单,我使用此表单创建和编辑对象。当我尝试创建表单时,当有人创建表单时,应始终选择一个用户,当编辑表单时,应选择该用户(如果作者希望更改列表中的默认用户) 大概是这样的: ->add('user', EntityType::class, [ 'class' => User::class, 'label' => 'user', 'choice_label' => 'name', 'data' => $this->em-

我有一个简单的symfony表单,我使用此表单创建和编辑对象。当我尝试创建表单时,当有人创建表单时,应始终选择一个用户,当编辑表单时,应选择该用户(如果作者希望更改列表中的默认用户)

大概是这样的:

->add('user', EntityType::class, [
  'class' => User::class,
  'label' => 'user',
  'choice_label' => 'name',
  'data' => $this->em->getRepository(User::class)->find(1),
])
现在它可以用于创建,但当我更改值并在保存后尝试编辑时,它会给我默认的用户年龄

那么,当表单是新的时,有什么方法可以使数据动态化呢?顺便说一句,我的表单中有一个选项告诉我表单什么时候是新的('new'=>true)。

我是这样解决的:

我没有找到一个更干净的方法来制作它

$userOptions = [
   'class' => User::class,
   'label' => 'User',
   'choice_label' => 'name'
];

if ($options['new']) {
   $userOptions['data'] = $this->defaultUser; // the default User i got from repository
}

这是一个正确的方法,但可以这样做:

public function buildForm(formbuilder接口$builder,数组$options)
{
$builder->addEventListener(FormEvents::预设置数据、函数(FormEvent$event){
$form=$event->getForm();
$form->add('user',EntityType::class[
'class'=>User::class,
“标签”=>“用户”,
“选择标签”=>“名称”,
'data'=>$event->getData()?:$this->em->getRepository(User::class)->find(1)//或$this->defaultUser
]);
});
}