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