Symfony2 - 具有嵌套对象的嵌套表单

时间:2015-05-04 21:25:24

标签: php forms symfony object entity

我是Symfony的新手,我正在尝试使用实体制作嵌套表单以减少代码重复,最简单的解释代码。 我按照文档(How to Reduce Code Duplication with inherit_data)上的示例进行操作,因此我创建了两个实体:

class Company {
    private $name;
    private $website;
    private $fullAddress;
    // Getters and Setters
}

class Customer {
    private $firstName;
    private $lastName;
    private $fullAddress;
    // Getters and Setters
}

现在我想减少创建第三个实体的代码,名为FullAddress:

class FullAddress {
    private $address;
    private $zipcode;
    private $city;
    private $country;
    // Getters and Setters
}

之后我在示例中创建了三个Form:

$builder
    ->add('name', 'text')
    ->add('website', 'text')
    ->add('fullAddress', new FullAddressType(), array(
        'data_class' => 'AppBundle\Entity\Company'
    ));

但是当我尝试创建一个CompanyType时,在控制器中,Symfony尝试搜索主类(公司和客户)中的每个fullAddress字段,给出错误(例如$ address不公开或没有get方法在班级公司)。 有没有办法解决这个问题,迫使Symfony在嵌套对象中搜索所需的字段?

我还尝试使用data_class和inherit_data属性,将Class更改为FullAddress而不是Company,但问题始终存在。

感谢。

1 个答案:

答案 0 :(得分:1)

我会采用更简单的方法。创建地址实体并向客户和公司实体添加关系。地址是非常通用的,所以没有真正的理由说明客户和公司不能只共享该地址实体。

然后,您只需创建一个通用的AddressType表单类型,并将其作为嵌套表单类型包含在CompanyType和CustomerType表单中。更容易处理,你仍然遵循DRY原则。