Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to prefill field of type EntityType from PHP

In my form, I have a field of type EntityClass:

$builder
    ->add(
        'user',
        EntityType::class,
        [
            'required' => false,
            'label' => 'User',
            'placeholder' => 'Please choose',
            'choice_label' => 'email',
            'choice_value' => 'id',
            'class' => 'AppBundle:User',
        ]
    )
;

This field works fine - until I try to pre-fill it from my PHP code. Then it stays empty, and only shows "Please choose".

Pre-filling looks like this:

$user = $this->userRepository->find(...);
$form->get('user')->setData($user);

But it also does not work if I call ->setData($user->getId()), or even ->setData($user->getEmail()).

So how do I prefill a field of type EntityType?

like image 369
Jost Avatar asked Nov 18 '25 15:11

Jost


1 Answers

You should not prefill Form, you should prefill Model, if you need it.

$user = $this->userRepository->find(...);

$entity = new YourEntity();
$entity->setUser($user);

$form = $this->createForm(YourEntity::class, $entity);

And it's not about EntityType. It's about any Type in Symfony - there is no way to bind a default value for them. Data is binded on Model.

UPD from comment: It's not true, that Form could be used without Model. It could be used without Doctrine Entity or any other ORM (or not ORM) Entity. But they still operate with data, i.o. with model.

\Symfony\Component\Form\FormFactoryInterface has definition

public function create($type = 'form', $data = null, array $options = array());

So some kind of $data is always present when you're using Form Component.

like image 138
Dmitry Malyshenko Avatar answered Nov 21 '25 01:11

Dmitry Malyshenko



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!