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