我有一个与另一个实体有OneToOne关联的实体。出于这些目的,我将调用初始实体“Parent”和相关的Entity“Child”。
我有一个父表单正常工作,嵌入子表单和两个实体的所有表单元素出现,我可以在控制器中保存数据。
现在我想为嵌入式学说实体中的许多属性设置默认值。我可以在控制器中为新实体设置值,但子实体是在嵌入的表单类中创建的:
// Parent form
class Parent extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
//parent->add(...)
$builder->add('child', new Child(), array());
}
// In Child Form
class Child extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('visibilitycode', 'entity', array('label' => 'Visibility', 'class'=>'Acme\MyBundle\Entity\Visibility', 'property'=>'name'));
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Acme\MyBundle\Entity\Child',
);
}
其中许多默认值都是关联的外键,所以如果我在控制器中设置它们,我可能会使用这样的东西:
$child->setVisibilityCode($em->getReference('AcmeMybundle:Visibility', 'P'));
答案 0 :(得分:1)
为您提供两种解决方案(或者更多:-)):
Child
实体本身的默认值(例如在构造函数中)使用表单组件的empty_data
选项:
class Child extends AbstractType {
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('visibilitycode', 'entity', array(
'label' => 'Visibility',
'class'=>'Acme\MyBundle\Entity\Visibility',
'property'=>'name'
));
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Acme\MyBundle\Entity\Child',
'empty_data' => function() use($visibility) {
$child = new Child();
$child->setVisibility($visibility);
return $child;
}
);
}
}