Symfony 如何从PHP中预填充EntityType类型的字段

Symfony 如何从PHP中预填充EntityType类型的字段,symfony,symfony-forms,Symfony,Symfony Forms,在我的表单中,我有一个类型为EntityClass的字段: $builder ->add( 'user', EntityType::class, [ 'required' => false, 'label' => 'User', 'placeholder' => 'Please choose', 'choice_label

在我的表单中,我有一个类型为
EntityClass
的字段:

$builder
    ->add(
        'user',
        EntityType::class,
        [
            'required' => false,
            'label' => 'User',
            'placeholder' => 'Please choose',
            'choice_label' => 'email',
            'choice_value' => 'id',
            'class' => 'AppBundle:User',
        ]
    )
;
该字段工作正常-直到我尝试从PHP代码中预填充它。然后它保持为空,只显示“请选择”

预填充如下所示:

$user = $this->userRepository->find(...);
$form->get('user')->setData($user);
但是如果我调用
->setData($user->getId())
,或者甚至调用
->setData($user->getEmail())
,它也不起作用


因此,如何预先填充
EntityType
类型的字段?

如果需要,您不应该预先填充
表单
,而应该预先填充
模型

$user = $this->userRepository->find(...);

$entity = new YourEntity();
$entity->setUser($user);

$form = $this->createForm(YourEntity::class, $entity);
它不是关于
EntityType
。它与Symfony中的任何类型有关-没有办法为它们绑定默认值。数据绑定在模型上

评论中的UPD:这不是真的,该表单可以在没有模型的情况下使用。它可以在没有条令实体或任何其他ORM(或非ORM)实体的情况下使用。但他们仍然使用数据,i.o.和模型

\Symfony\Component\Form\FormFactoryInterface具有定义

public function create($type = 'form', $data = null, array $options = array());

因此,当您使用表单组件时,总会出现某种类型的
$data

何时何地设置数据?此外,该“主表单”(即您调用构建器的地方)是否绑定到实体?@DonCallisto表单未绑定到实体,当
$form->isSubmitted()
返回
false
时,它由控制器中调用的服务填充。(由于与使用继承的实体存在关系,因此无法将其绑定到实体)。请使用此处所需的所有信息修改您的问题。(实体、控制器、表单等)symfony中的表单与实体完全分离-您可以使用它们,而无需实体。医生是这么说的。由于某些原因(相关实体中的继承),我无法将模型绑定到表单。这不是真的。表单可以不必与条令实体(或任何其他ORM实体)一起运行,但它们仍然可以与某些模型一起运行。如果您看到一个FormFactoryInterface,则很清楚
公共函数create($type='form',$data=null,array$options=array())-$数据是模型。什么样的模型-这取决于你。好的,你是对的-数据模型可能是一个简单的关联数组。我已经切换到在创建表单时只提供关联数组,现在它可以工作了。谢谢