Search code examples
phpsymfonyfosuserbundlesymfony2-easyadmin

Use function to add choices to select form Symfony 2


I'm currently developping a Symfony application (v2.8) with two main bundles : EasyAdmin and FOSUserBundle.

I have users with a particular role and I'm using a 'findBy' with an array to retrieve those users.

I would like to override the form of my admin controller to fill a select form choices with those users. I know it's possible to do it with an array but I want something dynamic if I add or delete some users.

I don't know how can I call a function from one of my controllers (or do I have to declare it as a service ?) to add choices to select form from a query.

Here is an example of what I would like :

$formBuilder->add('field_to_override', 'choice', array(
   'choices' => **my_function**,
   'multiple' => true,
   'expanded' => true,
));

I hope I'm clear in my explanation.

Thank you in advance !


Solution

  • Consider using an EntityType field, which is a specialized form of Choice field which uses Doctrine entities for the choices.

    It is possible to specify a custom query for the choices too, e.g.

    $builder->add('users', EntityType::class, array(
        'class' => 'AppBundle:User',
        'query_builder' => function (EntityRepository $er) {
            return $er->createQueryBuilder('u')
                ->orderBy('u.username', 'ASC');
        },
    ));