1

我有一个简单的表单,其中包含两个字段,第一个字段只是一个选择,第二个字段包含一个值,需要借助第一个字段进行检查。

我发现了一个基于两个字段的类似问题 Symfony2 表单验证,并尝试使用回调验证器。
我已经阅读了文档,但我不知道如何使用它来访问数据库。

似乎唯一的方法是静态调用验证方法,但在这种情况下,我失去了控制器的上下文。我需要它来访问例如数据库。
在这种关系中,我正在使用 Silex 并希望访问它提供的服务。

该表单未映射到任何类,因此创建自己的约束对我来说看起来是错误的,因为我看不到任何将其他字段传递给验证器的方法。

有没有办法实现它?

还是我需要另一种方法?

4

1 回答 1

2

我强烈建议您将表单映射到一个类并创建一个自定义约束......

我已经写了一个详细的例子来说明如何:

  • 创建自己的验证约束
  • 把它变成一种服务
  • 注入对象管理器
  • 从约束访问数据库

TLDR:

您需要的是类级别的自定义验证器。

需要一个类级验证器,因为如果要验证多个相关值,则需要访问整个对象(不仅仅是单个属性)......

...或者需要使用另一个属性作为选择标准从数据库中获取一些东西。

这是示例的完整答案


另一种选择可能是创建一个表单事件侦听器并将对象管理器传递给它,然后再将其添加到表单中。

然后自己处理监听器内部的验证过程(根据数据库检查数据+最终向表单添加错误)。

于 2014-02-24T22:25:43.553 回答