你好stackexchange用户,
我有一个数据(模型)类,它有两个看起来像这样的方法:
class ContactDetails {
public function setWebsite($address, $type) {
//do something...
}
public function getWebsite($type) {
//do something...
}
}
现在我想创建一个表单,用户可以在其中输入网址并为地址选择类型(例如“私人”或“商家”)。
为了实现这一点,我创建了一个像这样的自定义表单类型
class ContactDetailsType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('type', 'text') //better: choice, but for the sake of demo...
->add('website', 'text')
;
}
public function getName() {
return 'ContactDetailsType';
}
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver
->setDefaults(array(
'data_class' => 'ContactDetails',
));
}
}
然后控制器看起来像这样:
public function indexAction(Request $request) {
//generate completely new cost unit
$costunit = new ContactDetails();
//generate form
$form = $this->createForm(new ContactDetailsType(), $costunit);
$form->add('save', 'submit');
$form->handleRequest($request);
if ($form->isValid()) {
//yay!
}
}
这显然不起作用,因为表单组件不知道如何将这两个字段从类型映射到数据模型类。
问题:将表单的两个字段的数据映射到数据模型类中的一个方法调用的最佳实践是什么,反之亦然?