Database 我可以在symfony2中使用数据转换器合并表单中的字段吗
是否可以使用数据转换器将表单中的(n)个字段合并到一个持久化字段中?Database 我可以在symfony2中使用数据转换器合并表单中的字段吗,database,forms,symfony,doctrine-orm,Database,Forms,Symfony,Doctrine Orm,是否可以使用数据转换器将表单中的(n)个字段合并到一个持久化字段中? 如果可能的话,怎么做?cookbook只给出了一个将一段数据转换为另一种类型的示例,但是我需要能够将N个字段转储到一个字段中,以便持久化。因此,如果我在表单中显示6个字段,DB表中只有3个是实字段,第一个和第二个字段将按原样保存,但其余4个字段将存储在第三个表列中。您应该通过FormEvent::POST_SUBMITevent执行此操作 基本上是这样的: $builder->addEventListener(Form
如果可能的话,怎么做?cookbook只给出了一个将一段数据转换为另一种类型的示例,但是我需要能够将N个字段转储到一个字段中,以便持久化。因此,如果我在表单中显示6个字段,DB表中只有3个是实字段,第一个和第二个字段将按原样保存,但其余4个字段将存储在第三个表列中。您应该通过
FormEvent::POST_SUBMIT
event执行此操作
基本上是这样的:
$builder->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $event) {
$form = $event->getForm();
// entity or array
$data = $event->getData();
// get data directly from form
$concatData = $form->get('non_mapped_field1_1')->getData() . ',' . $form->get('non_mapped_field1_2')->getData();
// assumig that data is entity class
$data->setSomeField($concatData);
}
);
似乎验证器组件也在
POST_SUBMIT
中运行,所以您是否有在验证运行后使用此数据集的风险?这是可能的,但我相信(不是100%确定)这是首先发生的,因为事件侦听器是在表单构建的最早阶段添加的。是否有什么特别的注意事项,注册此特殊事件侦听器时?似乎我从未调用POST_SUBMIT(Symfony 3.3)。请确保您在表单(而不是字段)上注册了事件。而且,愚蠢的是,请确保提交表单('submit()'或'handleRequest()')