2012-07-05 65 views
6

之前修改窗体值我有以下情况:Symfony2中:如何验证

  • 表单字段类型date
  • dd.mm.YYYY
  • 验证模式的辅助对象,轮流1212.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, 
)); 
+0

我在下面发布了一个答案,但如果您需要更多的细节,随时发布您的表单类型和模型的代码,我可能会得到更具体的。 – MDrollette 2012-07-05 16:56:54

回答

11

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

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

+0

非常感谢,'DataTransformer'似乎正是我正在寻找的。 – insertusernamehere 2012-07-09 08:46:34