【问题标题】:Symfony2 validation filtersSymfony2 验证过滤器
【发布时间】:2023-11-26 08:31:01
【问题描述】:

在我的 Symfony 2 应用程序中,我需要在将输入传递给验证 [1] 之前过滤输入,但是,我似乎无法在 Symfony 中找到任何系统来执行此操作。

我寻找的过滤类型是例如能够在验证之前从特定字段中过滤出破折号。例如。用户可以输入123-123,但唯一接受的值是123123。就像我可以设置带有约束的验证规则一样,我正在为过滤器寻找类似的东西。

[1]http://symfony.com/doc/current/book/validation.html

【问题讨论】:

    标签: validation symfony filtering


    【解决方案1】:

    Nifr's 的答案很好,但缺少一个重要的替代方案,如果我正确理解您的问题,它似乎完全符合您的需求。

    您可以使用一个hook,它几乎是一个事件监听器:如果某事发生或将要发生,它会拦截事件并将其重定向到您的函数。

    在这种情况下,您需要一个 PRE_BIND 挂钩(自 2.3 版本起已弃用,现在称为 PRE_SUBMIT

    如果您需要帮助,请阅读this

    【讨论】:

      【解决方案2】:

      要么写你的own Validation Assert 来过滤,然后为此目的代理其他验证器......

      ...或一个或多个Regex Asserts

      ...或使用DataTransformer 转换/过滤输入。

      在涉及 DataTransformer 的情况下,您还可以考虑创建一个新的 FieldType,它使用分隔符呈现两个输入,就像 date 表单字段一样。 (如果不与widget => single_text 一起使用)

      【讨论】: