使用其他数据库根据其他字段验证字段

时间:2014-02-24 21:32:48

标签: php symfony silex symfony-2.4 php-closures

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

我发现了一个类似的问题Symfony2 form validation based on two fields并尝试使用 Callback 验证器。
我已阅读documentation,但我无法弄清楚如何使用它来访问数据库。

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

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

有没有办法实现它?

或者我需要另一种方法吗?

1 个答案:

答案 0 :(得分:2)

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

我写了一个关于如何:

的详细例子
  • 创建自己的验证约束
  • 将其转变为服务
  • 注入对象管理器
  • 从约束
  • 访问数据库

<强> TLDR:

  

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

     

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

     

...或者需要使用另一个属性作为select-criteria从数据库中获取内容。

这是 the complete answer with example


另一个选项可能是创建表单事件侦听器并在将对象管理器添加到表单之前将其传递给它。

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