我是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,但问题始终存在。
感谢。
答案 0 :(得分:1)
我会采用更简单的方法。创建地址实体并向客户和公司实体添加关系。地址是非常通用的,所以没有真正的理由说明客户和公司不能只共享该地址实体。
然后,您只需创建一个通用的AddressType表单类型,并将其作为嵌套表单类型包含在CompanyType和CustomerType表单中。更容易处理,你仍然遵循DRY原则。