我有一个带有联系人列表的表格。我希望字段“名字”显示为带有提交后的所选联系方式。我的问题是该字段出现了,但我无法设置好的数据,该字段始终保持为空。
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('contacts', ChoiceType::class, [
'label' => 'Contact',
'placeholder' => 'Choose a contact',
'choices' => $this->getContacts(),
'mapped' => false,
])
->setMethod('POST')
;
$builder->get('contacts')->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
$contactId = $event->getData();
$parentForm = $event->getForm()->getParent();
$contactEntity = $exampleEm->getrepository(Contact::class)->find($contactId);
$firstName = $contactEntity->getFirstName();
// where can I set the 'contactFirstname' data ?
$parentForm
->add('contactFirstname', TextType::class, [
'label' => 'First name',
]);
})
;
}
如何输入正确的数据,以便该字段显示为预先填充的内容?
编辑: 我找到了一种方法,但这并不可怕:
$parentForm
->add('contactFirstname', TextType::class, [
'label' => 'First name',
'empty_data' => $firstName,
]);
({'data' => $firstName
不要为我工作。)
$parentForm->get('contactFirstname')->setData($firstName);
也不起作用
答案 0 :(得分:0)
您不能简单地设置TextType字段的“数据”选项吗?
// ...
$contactEntity = $exampleEm->getrepository(Contact::class)->find($contactId);
$firstName = $contactEntity->getFirstName();
$parentForm
->add('contactFirstname', TextType::class, [
'label' => 'First name',
'data' => $firstname //here?
]);
编辑:
根据this post submitted on github,需要提交表单字段以更改其数据。
在他的一种解决方案中,他像您一样使用“ empty_data”。
在另一项中,他将该字段添加到构建器中。用 display:“ none”; 隐藏它,直到提交数据为止。
答案 1 :(得分:0)
未映射字段的数据也可以直接修改:
$form->get('agreeTerms')->setData(true);
所以尝试一下:
$parentForm
->add('contactFirstname', TextType::class, [
'label' => 'First name',
]);
$parentForm->get('contactFirstname')->setData($firstName);
答案 2 :(得分:-1)
也许在创建表单之前使用了setter?
https://symfony.com/doc/current/forms.html#building-the-form