Symfony 3.4 - POST_SUBMIT 事件的预填充字段
Symfony3.4 - Pre filled field on POST_SUBMIT Event
我有一个包含联系人列表的表格。我希望字段 "first name" 在提交 后显示所选联系人值 。我的问题是字段出现了但是我不能设置好的数据,字段一直是空的。
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);
也不行
也许在创建表单之前使用 setter?
https://symfony.com/doc/current/forms.html#building-the-form
您不能简单地设置 TextType 字段的 'data' 选项吗?
// ...
$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"; 隐藏它,直到提交数据。
The docs 说
the data of an unmapped field can also be modified directly:
$form->get('agreeTerms')->setData(true);
所以试试这个:
$parentForm
->add('contactFirstname', TextType::class, [
'label' => 'First name',
]);
$parentForm->get('contactFirstname')->setData($firstName);
我有一个包含联系人列表的表格。我希望字段 "first name" 在提交 后显示所选联系人值 。我的问题是字段出现了但是我不能设置好的数据,字段一直是空的。
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);
也不行
也许在创建表单之前使用 setter?
https://symfony.com/doc/current/forms.html#building-the-form
您不能简单地设置 TextType 字段的 'data' 选项吗?
// ...
$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"; 隐藏它,直到提交数据。
The docs 说
the data of an unmapped field can also be modified directly:
$form->get('agreeTerms')->setData(true);
所以试试这个:
$parentForm
->add('contactFirstname', TextType::class, [
'label' => 'First name',
]);
$parentForm->get('contactFirstname')->setData($firstName);