如何将两个symfony表单字段映射到一个模型方法?

时间:2014-02-24 14:13:06

标签: php forms symfony

你好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!
    }

}

这显然不起作用,因为表单组件不知道如何将这两个字段从类型映射到数据模型类。

问题:将表单的两个字段的数据映射到数据模型类中的一个方法调用的最佳实践是什么,反之亦然?

1 个答案:

答案 0 :(得分:3)

在你的位置,我会将两个字段设置为虚拟形式,然后使用事件监听器在实体中设置数据。

Info about form events