Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Symfony3.4 - Pre filled field on POST_SUBMIT Event

I have a form with a contact list. I want the field "first name" appear with the selected contact value after submit. My problem is that the field appear but I cant set the good data, the field always remains empty.

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',
            ]);
    })
    ;
}

How to enter the right data so that the field appears pre-filled?

Edit : I found a method, but it's not terrible:

$parentForm
            ->add('contactFirstname', TextType::class, [
                'label'         => 'First name',
                'empty_data'    => $firstName,
        ]);

('data' => $firstNamedont work for me.)

$parentForm->get('contactFirstname')->setData($firstName); doesn't work either

like image 716
arno Avatar asked Oct 16 '18 13:10

arno


2 Answers

Can't you simply set the 'data' option of your TextType field?

// ...

$contactEntity = $exampleEm->getrepository(Contact::class)->find($contactId);
$firstName     = $contactEntity->getFirstName();

$parentForm
    ->add('contactFirstname', TextType::class, [
         'label' => 'First name',
         'data' => $firstname //here?
     ]);

EDIT:

According to this post submitted on github, the form field needs to be submitted in order to have it's data changed.

In one of his solutions, he uses the "empty_data" as you did.

In the other one, he adds the field to the builder. Hides it with display: "none"; until the data is submitted.

like image 110
Stefmachine Avatar answered Nov 15 '22 01:11

Stefmachine


The docs say

the data of an unmapped field can also be modified directly:

$form->get('agreeTerms')->setData(true);

So try this:

$parentForm
        ->add('contactFirstname', TextType::class, [
            'label' => 'First name',
        ]);

$parentForm->get('contactFirstname')->setData($firstName);
like image 39
Arleigh Hix Avatar answered Nov 15 '22 01:11

Arleigh Hix