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

ins*_*ere 8 forms doctrine symfony

我有以下情况:

  • 表单字段类型 date
  • 像验证模式 dd.mm.YYYY
  • 辅助对象,轮流12进入12.07.20122.5进入02.05.2012

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

当我从set实体的-method 调用它时,值实际上会改变.但是当再次加载表单时(例如,提交不完整),将显示旧值(如2.5)而不是转换后的值(2.5.2012).现在,我如何告诉表单,实体中的值已经改变了?

也许在中间还有另一种方式:

$form->bindRequest($request);
// do some fancy stuff here
if ($form->isValid()) {}
Run Code Online (Sandbox Code Playgroud)

PHP

这是来自实体:

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

这是从类型:

$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,
));
Run Code Online (Sandbox Code Playgroud)

MDr*_*tte 12

有两种方法可以修改表单和绑定到它们的数据.您可以使用表单事件,有其使用的例子在这里也可以使用该解释一DataTransformer 这里

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