getViewData与getNormData和DataTransformers - 取决于上下文的不同结果

时间:2016-04-29 13:54:55

标签: symfony symfony-forms

我有一个包含多个字段的表单。

然后我将DataTransformer绑定到其中一个。如果我获得数据getViewDatagetNormData,则变换器可以正常工作。

但是如果我在整个表单上发布这些方法,变换器处理的数据将被完全忽略。

Form中,由于以下内容正在覆盖数据

$childrenIterator = new InheritDataAwareIterator($this->children);
$childrenIterator = new \RecursiveIteratorIterator($childrenIterator);
$this->config->getDataMapper()->mapFormsToData($childrenIterator, $viewData);

我的映射器是PropertyPathMapper。不幸的是,它基于每个孩子的getData方法。

是否可以绕过viewData覆盖/实现正确转换的数据而无需编写全局变换器?

1 个答案:

答案 0 :(得分:0)

解决方法:

$data = array();
foreach ($form->all() as $k => $el) {
    $data[$k] = $el->getData(); // or getNormData or getViewData
}

不幸的是我没有解决方案。

目前的行为不符合我的预期。至少应该提到in the symfony cookbook

如你所见,我有同样的问题。我写了一个测试用例,以确保我不会误解变压器的工作原理。我后来找到了你的问题。

我的测试用例: https://github.com/SimonHeimberg/SymfonyFormForm_DataTransformer_Demo