在Symfony 2表单上为"非映射实体字段"设置默认值

Nel*_*ira 6 php symfony

我有一个Form类,其中包含一个非映射的实体字段:

->add('client', 'entity', array(
    'class' => 'MyBundle:Client',
    'property' => 'name',
    'empty_value' => 'Select...',
    'query_builder' => function(EntityRepository $er) {
        return $er->createQueryBuilder('c')
            ->orderBy('c.name', 'ASC');
    },
    'mapped' => false,
))
Run Code Online (Sandbox Code Playgroud)

我创建的像这样:

$form = $this->createForm(new MyType(),
    $entity,
    array('action' => $this->generateUrl('my_action'))
);
Run Code Online (Sandbox Code Playgroud)

如何设置默认值?试过这个,但没有奏效:

'data' => 23423, // id in table 
'data' => 'Client name'
$form->setDefault('client', 'Client name'); // in controller
Run Code Online (Sandbox Code Playgroud)

请注意,它是一个非映射字段.

小智 4

Symfony2 设置默认选择字段选择

@Carrie Kendall 回答:

“您需要将 EntityManager 注入到您的 FormType 类中。这是一个简化的示例:”

class EntityType extends AbstractType{
    public function __construct($em) {
        $this->em = $em;
    }

    public function buildForm(FormBuilderInterface $builder, array $options){
         $builder
             ->add('MyEntity', 'entity', array(
                     'class' => 'AcmeDemoBundle:Entity',
                     'property' => 'name',
                     'query_builder' => function(EntityRepository $er) {
                         return $er->createQueryBuilder('e')
                             ->orderBy('e.name', 'ASC');
                         },
                     'data' => $this->em->getReference("AcmeDemoBundle:Entity", 3)
        ));
    }
}
Run Code Online (Sandbox Code Playgroud)

在控制器中:

 // ...    

 $form = $this->createForm(new EntityType($this->getDoctrine()->getManager()), $entity);

// ...
Run Code Online (Sandbox Code Playgroud)