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

时间:2016-09-20 12:01:49

标签: symfony symfony-forms

在我的表单中,我有一个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类型的字段?

1 个答案:

答案 0 :(得分:1)

您不应该预先填写Form,如果需要,您应该预先填写Model

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

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

$form = $this->createForm(YourEntity::class, $entity);

并不是EntityType。它与Symfony中的任何类型有关 - 无法为它们绑定默认值。数据在模型上绑定。

来自评论的UPD:不是真的,Form可以在没有Model的情况下使用。它可以在没有Doctrine Entity或任何其他ORM(或非ORM)实体的情况下使用。但他们仍然使用数据,i.o。与模特。

\ Symfony \ Component \ Form \ FormFactoryInterface 有定义

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

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