【问题标题】:Symfony2: How to modify a form value before validationSymfony2:如何在验证之前修改表单值
【发布时间】:2012-07-05 16:11:11
【问题描述】:

我有以下情况:

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

【问题讨论】:

  • 我在下面发布了一个答案,但如果您需要更多详细信息,请随时发布您的表单类型和模型的代码,我可能会更具体。

标签: forms symfony doctrine


【解决方案1】:

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

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

【讨论】:

  • 非常感谢,DataTransformer 似乎正是我要找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 2013-06-22
  • 2016-05-16
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多