在嵌入式Symfony2表单中,我在哪里设置关联实体的默认值?

时间:2012-05-02 22:58:57

标签: php symfony doctrine-orm

我有一个与另一个实体有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'));

1 个答案:

答案 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;
                }
            );
         }
    }