与Symfony的复杂表单 - 父实体和子实体

时间:2014-07-28 20:18:41

标签: php symfony

我不太确定我的标题是否足够丰富。如果有任何具有编辑权限的人想在阅读之后调整它,请随意。

我需要创建一个表单类型,它可以镜像我当前的父< - >子,我与我的实体之间的1对1关系。现在,从文档判断,我可以指定子实体的唯一方法是使用Entity表单类型,但这似乎没有给我我想要的。我不想选择可以添加到父级的现有实体。我需要能够填写父级的字段,然后可选地填写子级的字段,所有这些都以相同的形式填写。理想情况下,我可以做类似的事情:

$builder->add('child', 'entity', array(
    'required' => false,
    'class' => 'MyBundle\Entity\Child',
    'type' => 'MyBundle\Form\Type\ChildType'
    )
);

但是,从我所看到的情况来看,type选项仅存在于集合中,这也不是我正在处理的内容。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我不确定我是否明白了你的意思,但这应该有效:

$builder->add('child', 'child_type');

http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html

<强>更新

class AddressType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('city','text');
        $builder->add('country','country');
    }

    public function getName()
    {
        return 'my_address_form';
    }
}

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name','text');
        $builder->add('address','my_address_form');
        //Or if you don't want to defined the child form as a service you can use
        //$builder->add('address', new AddressType());
    }

    public function getName()
    {
        return 'my_user_form';
    }
}

如果您需要将AddressType定义为服务:

services:
    acme_demo.form.type.address:
        class: Acme\DemoBundle\Form\Type\AddressType
        tags:
            - { name: form.type, alias: my_address_type }