0

我有一个与另一个实体有 OneToOne 关联的实体。出于这些目的,我将调用初始实体“父”和关联的实体“子”。

我有一个嵌入子表单的父表单工作正常,并且两个实体的所有表单元素都出现了,我可以将数据很好地保存在控制器中。

现在我想为嵌入式学说实体中的许多属性设置默认值。我可以在控制器中为新实体设置值,但子实体是在嵌入式表单类中创建的:

// 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'));
4

1 回答 1

1

为您提供了两种解决方案(或者更多:-)):

  • 初始化Child实体本身的默认值(例如在构造函数中)
  • 使用empty_dataForm 组件的选项:

    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;
                }
            );
         }
    }
    
于 2012-05-03T14:18:35.463 回答