如何使用数据库中的数据在symfony2选择框中设置默认值

时间:2012-08-17 04:22:31

标签: php forms symfony doctrine-orm repository

我有这段代码

->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']
            ))

它不起作用

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

2 个答案:

答案 0 :(得分:5)

您可以使用以下其中一项:

  1. 在对象

    中设置默认值
    $cl->setUser($this->getDoctrine()->getEntityManager()->getReference('Acme:User',2));
    
  2. 在表单构建器中使用首选选项:

    'preferred_choices' => array('2')
    
  3. 或设置'property_path' => false并使用'data' => YourDefaultEnity

答案 1 :(得分:0)

表单应自动将user-> id值映射到选定的实体选择字段。例如,如果您的计算机实体与名为“computer_users”的连接表中的用户实体具有OnetoOne关系:

class Computer{

    private $user;

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

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

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

表单类中的“user”字段应该从传递给表单的Computer类中的“user”属性对象中获取user-> id值。

或者,您可以通过使用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()
            )
    );