Symfony2:如何在验证之前修改表单值

时间:2012-07-05 16:11:11

标签: forms symfony doctrine

我有以下情况:

  • 表单字段类型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;

这是来自 Type

$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,
));

1 个答案:

答案 0 :(得分:12)

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

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