如何通过ModelTransformer获取数据

时间:2016-10-14 10:43:23

标签: forms symfony

以下是我的Type Class的一些代码。对于其中一个属性,我使用ModelTransform来显示我想要的内容:

$builder->add('myProperty', 'text', array(
   'label' => 'MyLabel',
   'required' => true,
   'disabled' => true
));

$builder->get('myProperty')
  ->addModelTransformer(new CallbackTransformer(
       function($propertyFrom) {
                return (round($propertyFrom/ 100, 3)) + 1;
            },
            function($propertyTo) {
                return round((($propertyTo- 1) * 100), 3);
            }
        ));
当我在树枝上展示我的表格时,它的效果很好。

我想从我的表单中获取实体。我猜,假设我有Form对象,我会这样做:

$entity = $form->getViewData()

我希望实体具有通过ModelTransform传递的字段的值。虽然我有没有变换的字段值。

最后我想知道$ form-> getData()和$ form-> getViewData()之间有什么区别。

如何使用ModelTransformer转换的值获取实体?

2 个答案:

答案 0 :(得分:1)

这是一个Symfony错误,它不通过对象上的getViewData应用转换器。但它在现场做到了。

getViewData vs. getNormData and DataTransformers - different results depending on context

答案 1 :(得分:1)

  

这是一种限制,因为具有对象或数组作为基础数据的复合形式不会使其视图数据与其子视图数据保持同步。 https://github.com/symfony/symfony/issues/18683#issuecomment-249676768

你可以得到不同的结果:

// if myProperty value is equal to 23

$form->get('myProperty')->getData();     //output: 23
$form->get('myProperty')->getNormData(); //output: 1.23
$form->get('myProperty')->getViewData(); //output: "1.23"