Symfony3.4-POST_SUBMIT事件上的预填充字段

时间:2018-10-16 13:10:59

标签: php symfony-3.4

我有一个带有联系人列表的表格。我希望字段“名字”显示为带有提交后的所选联系方式。我的问题是该字段出现了,但我无法设置好的数据,该字段始终保持为空。

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);也不起作用

3 个答案:

答案 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)

The docs

  

未映射字段的数据也可以直接修改:

     

$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