【问题标题】:Constraint Validator validates Entity before Entity is ready in Symfony 2约束验证器在实体在 Symfony 2 中准备好之前验证实体
【发布时间】:2014-02-19 11:12:29
【问题描述】:

我的 Symfony2 (2.4.2) 应用程序有一个表单和一个实体,我在某些字段上设置了一些验证约束。实体的变量之一是一个不应为空的数组。

表单有一个不直接映射到实体的字段。输入是逗号分隔的字符串;这个字符串将preg_split 放入一个数组并保存到前面提到的实例变量中。该操作由FormEvents::POST_SUBMIT触发。

但是,当我提交表单时,即使输入字符串不为空,表单也会显示验证失败。我做了一些调试,发现验证实际上发生在FormEvents::POST_SUBMIT之前。我尝试过其他FormEvents,但没有运气。

有没有办法在验证之前触发事件?

注意:上面的场景被缩短了,如果上下文是我的真实应用程序,我要问一个问题太长了。

【问题讨论】:

  • 你为什么不在FormEvents::PRE_SUBMIT做这个?
  • 为什么表单域没有映射到实体?这是一个验证错误,因为该字段当时是空的,还是因为它不是一个看起来像 POST_SUBMIT 之后的数组?由于它不是空的,也许您应该将验证格式更改为拆分事件之前的样子。
  • 使用 DataTransformers 进行此类操作。不形成事件。
  • @JamesHalsall 正如我所说,我已经尝试了所有的 FormEvents 但没有运气。
  • @SenseException 因为客户端要求输入字段是文本字段,并允许用户输入一些格式为'000000, 000000, 000000...'的电话号码。

标签: php forms validation symfony


【解决方案1】:

使用 DataTransformers 进行此类操作。不形成事件。

数据转换器将在验证之前启动。转换器会将用户键入的任何内容转换为您在内部期望的任何内容。然后验证将对内部数据格式进行操作。

http://symfony.com/doc/current/cookbook/form/data_transformers.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2014-09-30
    • 2018-12-07
    • 1970-01-01
    • 2012-08-17
    相关资源
    最近更新 更多