2014-12-05 137 views
5

我,它出現了一個非映射實體領域的Form類的「非映射實體領域的」設置默認值:的Symfony的2形式

->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, 
)) 

我創造這樣的:

$form = $this->createForm(new MyType(), 
    $entity, 
    array('action' => $this->generateUrl('my_action')) 
); 

如何設置它的默認值?嘗試過,但沒有工作:

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

請注意,這是一個非映射字段。

回答

3

Symfony2 Setting a default choice field selection

@Carrie肯德爾答案:

「你需要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) 
     )); 
    } 
} 

在控制器:

// ...  

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

// ... 
+0

工作。謝謝。 – 2014-12-05 13:10:56