Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 我可以在symfony2中使用数据转换器合并表单中的字段吗_Database_Forms_Symfony_Doctrine Orm - Fatal编程技术网

Database 我可以在symfony2中使用数据转换器合并表单中的字段吗

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

是否可以使用数据转换器将表单中的(n)个字段合并到一个持久化字段中?
如果可能的话,怎么做?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()')