9

我有以下情况:

  • 表单字段类型date
  • 一个验证模式,比如dd.mm.YYYY
  • 12变成12.07.20122.5变成02.05.2012等的辅助对象。

我的问题是:我在哪里调用转换输入值的方法?

当我从set实体的 - 方法调用它时,值实际上会发生变化。但是当再次加载表单(例如不完整的提交)时,会显示旧值(如2.5)而不是转换后的值(2.5.2012)。现在,我如何告诉表单,实体内的值已更改?

也许在两者之间还有另一种方法:

$form->bindRequest($request);
// do some fancy stuff here
if ($form->isValid()) {}

PHP

这是来自实体

/**
 * @ORM\Column(type="datetime", nullable=true)
 * @Assert\DateTime()
 */
protected $date_start;

这是来自类型

$builder->add('date_start', 'datetime', array(
    'label' => 'Start Datum/Uhrzeit',
    'date_widget' => 'single_text',
    'time_widget' => 'single_text',
    'date_format' => 'dd.MM.yyyy',
    'with_seconds' => false,
    'required' => false,
));
4

1 回答 1

13

有两种方法可以修改表单和绑定到它们的数据。您可以使用表单事件,这里有一个使用示例,或者您可以使用此处解释DataTransformer

从你的情况来看,我认为 DataTransformer 最有意义。您以一种方式表示对象中的数据,但您需要以不同的方式在表单中表示它,并在提交表单时反转该转换。这是 DataTransformer 的目的。

于 2012-07-05T16:17:21.627 回答