Symfony form builder default select by EntityType

Valentine Murnik

I try to create form with html select element using EntityType. I must get values by some condition and by this condition necessary default value not select from database. So i get all options values, without one, that must be a default value. So i try to find a way to put this value to select. What i tried...

Set value in form:

$growing = $em->getRepository('FarmBundle:Growing')->findGrowing($user_id);
$garden = $em->getRepository('FarmBundle:Garden')->find(7);
$tableForm = $this->createForm('FarmBundle\Form\GrowingType', $growing, ['user_id' => $user_id]);

$tableForm->get('garden')->setData($garden);
$form = $tableForm->createView()

Then i tried to set data in entity:

$growing = $em->getRepository('FarmBundle:Growing')->findGrowing($user_id);
$garden = $em->getRepository('FarmBundle:Garden')->find(7);
$growing->setGarden($garden);
$tableForm = $this->createForm('FarmBundle\Form\GrowingType', $growing, ['user_id' => $user_id]);
$form = $tableForm->createView()

Then i tried to set default select value in form_builder using 'data' attribute:

$growing = $em->getRepository('FarmBundle:Growing')->findGrowing($user_id);
$garden = $em->getRepository('FarmBundle:Garden')->find(7);
$tableForm = $this->createForm('FarmBundle\Form\GrowingType', $grow, [
            'user_id' => $user_id,
            'selected_choice' => $garden
        ]);
$form = $tableForm->createView();

Form_builder code:

class GrowingType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('id', HiddenType::class)
            ->add('garden', EntityType::class , [
                'class' => 'FarmBundle\Entity\Garden',
                'query_builder' => function (GardenRepository $gr) use ($options) {
                    return $gr->queryFreeGardens($options['user_id']);
                },
                'attr' => [
                    'data-type' => 'text',
                    'class' => 'table-select',
                    'disabled' => true
                ],
                'required' => false,
                'data' => $options['selected_choice']
            ]);
     }

     /**
      * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'FarmBundle\Entity\Growing',
            'selected_choice' => null,
            'user_id' => null
        ));
    }
 }

And code of query for query builder:

class GardenRepository extends \Doctrine\ORM\EntityRepository
{
    public function queryFreeGardens($user_id)
    {
        $qb = $this->createQueryBuilder('g')
            ->leftJoin('g.growing', 'grow')
            ->where('grow.plantDate is NULL')
            ->orWhere('grow.endDate is not NULL')
            ->andWhere('g.user = :user_id')
            ->orderBy('g.name')
           ->setParameter('user_id', $user_id);

    return $qb;
    }
}

And all of this 3 methods not works. Result is one, if entity not get for query in query builder, i cant set this entity. If i will set entity as default value, that was in query builder all will works fine.
How can i solve this problem?

Denis Alimov

try this in controller:

$growing = $em->getRepository('FarmBundle:Growing')->findGrowing($user_id);
$garden = $em->getRepository('FarmBundle:Garden')->find(7);
$tableForm = $this->createForm('FarmBundle\Form\GrowingType', $grow, [
            'user_id' => $user_id,
            'additional_id' => 7
        ]);
$form = $tableForm->createView();

in form:

class GrowingType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('id', HiddenType::class)
            ->add('garden', EntityType::class , [
                'class' => 'FarmBundle\Entity\Garden',
                'query_builder' => function (GardenRepository $gr) use ($options) {
                    return $gr->queryFreeGardens($options['user_id'], $options['additional_id');
                },
                'attr' => [
                    'data-type' => 'text',
                    'class' => 'table-select',
                    'disabled' => true
                ],
                'required' => false
            ]);
     }

     /**
      * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'FarmBundle\Entity\Growing',
            'additional_id' => null,
            'user_id' => null
        ));
    }
 }

in repository:

class GardenRepository extends \Doctrine\ORM\EntityRepository
{
    public function queryFreeGardens($user_id, $additional_id)
    {
        $qb = $this->createQueryBuilder('g')
            ->leftJoin('g.growing', 'grow')
            ->where('grow.plantDate is NULL')
            ->andWhere('g.id = :additional_id')
            ->orWhere('grow.endDate is not NULL')
            ->andWhere('g.user = :user_id')
            ->andWhere('g.id = :additional_id')  
            ->orderBy('g.name')
           ->setParameter('user_id', $user_id)->setParameter('additional_id', $additional_id);

    return $qb;
    }
}

maybe you will need to adjust your repository method to retrieve values in right way. There are or clause, you should add this additional id to both branches of your or clause. The main idea is to retrieve you selected object too.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Symfony 4 Form Builder EntityType query all where in but not for default value

From Dev

Symfony2 Multiple Select on Form Builder default values

From Dev

Symfony2 Multiple Select on Form Builder default values

From Dev

Symfony Form Validation EntityType

From Dev

Symfony form EntityType without preloading

From Dev

Symfony form EntityType without preloading

From Dev

Define default selection if no data in db - Symfony EntityType

From Dev

Symfony Form EntityType, add custom data to choice

From Dev

Symfony: Form EntityType loading from another database

From Dev

Symfony - EntityType select repeats the same option

From Dev

set a default value for select field in Laravel using collective form builder?

From Dev

Symfony2 Dynamic Groups of EntityType fields in form

From Dev

Symfony 3 Form EntityType doesn't prefill from object

From Dev

Query_builder Symfony form builder error

From Dev

Query_builder Symfony form builder error

From Dev

Symfony: use of query builder in a Form

From Dev

Form builder for Symfony login page

From Dev

How to add if into form builder in Symfony

From Dev

Symfony EntityType as autocomplete

From Dev

symfony form builder update option field

From Dev

Symfony2 Edit Without Form Builder

From Dev

rails 4, change default form builder globally

From Dev

Embed Form and EntityType multiple

From Dev

Symfony form with EntityType field yields a 'This value should not be blank' error if the field has a Valid() contraint in the object class

From Dev

Symfony3 many-to-many realtion when form has entitytype

From Dev

Setting Symfony2 form data outside of the form builder

From Dev

Can the Symfony2 form builder be used for the login form?

From Dev

Setting Symfony2 form data outside of the form builder

From Dev

Symfony - pass custom data from Form Builder to form theme

Related Related

  1. 1

    Symfony 4 Form Builder EntityType query all where in but not for default value

  2. 2

    Symfony2 Multiple Select on Form Builder default values

  3. 3

    Symfony2 Multiple Select on Form Builder default values

  4. 4

    Symfony Form Validation EntityType

  5. 5

    Symfony form EntityType without preloading

  6. 6

    Symfony form EntityType without preloading

  7. 7

    Define default selection if no data in db - Symfony EntityType

  8. 8

    Symfony Form EntityType, add custom data to choice

  9. 9

    Symfony: Form EntityType loading from another database

  10. 10

    Symfony - EntityType select repeats the same option

  11. 11

    set a default value for select field in Laravel using collective form builder?

  12. 12

    Symfony2 Dynamic Groups of EntityType fields in form

  13. 13

    Symfony 3 Form EntityType doesn't prefill from object

  14. 14

    Query_builder Symfony form builder error

  15. 15

    Query_builder Symfony form builder error

  16. 16

    Symfony: use of query builder in a Form

  17. 17

    Form builder for Symfony login page

  18. 18

    How to add if into form builder in Symfony

  19. 19

    Symfony EntityType as autocomplete

  20. 20

    symfony form builder update option field

  21. 21

    Symfony2 Edit Without Form Builder

  22. 22

    rails 4, change default form builder globally

  23. 23

    Embed Form and EntityType multiple

  24. 24

    Symfony form with EntityType field yields a 'This value should not be blank' error if the field has a Valid() contraint in the object class

  25. 25

    Symfony3 many-to-many realtion when form has entitytype

  26. 26

    Setting Symfony2 form data outside of the form builder

  27. 27

    Can the Symfony2 form builder be used for the login form?

  28. 28

    Setting Symfony2 form data outside of the form builder

  29. 29

    Symfony - pass custom data from Form Builder to form theme

HotTag

Archive