forms - Symfony2 : How to modify a form value before validation

标签 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;

这是来自类型:

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

最佳答案

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

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

关于forms - Symfony2 : How to modify a form value before validation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11348370/

相关文章:

forms - Angular 2 : Using dynamic inputs in reactive forms

html - 多部分请求中的 'part' 是什么?

sql-server - Doctrine + SQL Server 存储过程

Symfony2 和 Doctrine,具有 OneToOne 关系的列不能为空

Javascript 和只有一个复选框 - 未定义

HTML 表单按钮 CSS

php - Symfony2 服务容器 - 将普通参数传递给服务构造函数

Symfony2 内核异常事件在生产模式下不处理 fatal error 异常

通配符子域的 Symfony 功能测试

php - 我们是否必须清除 Doctrine2 中两个查询之间的查询生成器?