我有一个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
“您需要将 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)