Mirage
Mirage

Reputation: 31568

How to set up default value in symfony2 select box with data from database

I have this code

->add('user', 'entity', array(
                            'class' => 'Acme\Entity\User',
                            'query_builder' => function(EntityRepository $er) use ($options)
     {                        return $er->createQueryBuilder('u')
                               ->orderBy('u.name', 'ASC');
                            },
            'data' => $option['id']
            ))

Its not working

public function buildForm(FormBuilderInterface $builder, array $options)


    {
            $builder
              ->add('description')

              ->add('user', 'entity', array(
                'class' => 'Acme\Entity\User',
                'query_builder' => function(EntityRepository $er) use ($options) {
                    return $er->createQueryBuilder('u');

                },
              'preferred_choices' => array('2')
              ))
        ;
    }

Upvotes: 1

Views: 10669

Answers (2)

Onshop
Onshop

Reputation: 3085

The form should map the user->id value automatically to the selected entity select field. For example if your have a Computer entity that has a OnetoOne relationship with a User entity in a join table called 'computer_users':

class Computer{

    private $user;

    /**
    * @ORM\OneToOne(targetEntity="ComputerUser", mappedBy="computer")
    */
    private $computerUsers;

    public function getUser(){
       return $computerUsers->getUser();
    }

    private function getComputerUser(){
       return $this->$computerUsers;
    }
}

The field 'user' in the form class should pick up the user->id value from the 'user' attribute object in the Computer class passed to the form.

Alternatively, you can explicitly set the value by explicitly passing the user entity into the form using SetData():

    $computerForm = $this->createForm( new ComputerForm(), $computer );
    $user         = $computer->getComputerUser()->getUser();

    $computerForm->get('user')->setData( $user );

    return $this->render( 'AcmeBundle:Computer:edit.html.twig'
                        , array( 'computer' => $computer
                        , 'computerForm'    => $computerForm->createView()
            )
    );

Upvotes: 0

Mikhail
Mikhail

Reputation: 2562

You can use the one of the following:

  1. Set a default value in the object

    $cl->setUser($this->getDoctrine()->getEntityManager()->getReference('Acme:User',2));
    
  2. Use a preferred choices option in the form builder:

    'preferred_choices' => array('2')
    
  3. Or set 'property_path' => false and use a 'data' => YourDefaultEnity

Upvotes: 5

Related Questions