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 原则。
我是 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 原则。