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

Symfony2 - Nested form with nested objects

我是 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
}

之后,我创建了三个表单,如示例所示:

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

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

我也试过 data_class 和 inherit_data 属性,将 Class 改为 FullAddress 而不是 Company,但问题总是出现。

谢谢。

我会采用更简单的方法。创建一个 Address 实体并添加与 Customer 和 Company 实体的关系。地址是一个非常通用的东西,所以没有真正的理由说明为什么客户和公司不能共享该地址实体。

然后您可以创建一个通用的 AddressType 表单类型并将其作为嵌套表单类型包含在您的 CompanyType 和 CustomerType 表单中。处理起来更简单,而且您仍然遵循 DRY 原则。