Symfony程序化表单验证

时间:2015-02-19 16:26:16

标签: php forms symfony

在Symfony 2.5.10中,我有多种表单类型,每种都有自己的验证组,调用各种类约束。每种类型代表工作流程中的特定步骤。最后一步迭代所有其他步骤,执行必要的验证并向用户显示任何可能的违规行为。

每种表单类型(data_class)背后的数据总是相同的:一个主义实体。

每个显示的违规都链接到表示相关步骤的URL /路径,并带有一个附加参数,如果存在,则应触发验证。这个想法是表单应该立即显示错误,而不是提交。换句话说,我希望以编程方式触发表单提交(服务器端,而不是JS!)。

我尝试过各种不同的方法:

  1. 以某种方式将实体(我有)放入请求并将后者的方法设置为POST,以便Form :: handleRequest自动处理所有内容。问题:将实体对象转换为数组,就像从实际表单提交中返回一样。也许是DataTransformer? PropertyAccessor接口?
  2. 作为1.但请调用Form :: submit。请参阅http://symfony.com/doc/2.5/cookbook/form/direct_submit.html#calling-form-submit-manually
  3. 验证自己(就像我在最后一步中所做的那样),给我一个ConstraintViolationList。迭代列表并为每次违规调用Form :: addError。问题:我需要将错误添加到正确的子元素,而不仅仅是父元素。也许我可以使用每个错误的propertyPath来做这个,但是如何从那个转到子表单?
  4. 非常感谢任何帮助。我一般都在浏览stackoverflow和网络,但无济于事。

1 个答案:

答案 0 :(得分:0)

第一种方式看起来不错。你应该检查ajax表单,他们只是使用像

这样的东西
$entity = $form->getData()

从表单中检索数据(可能是数组,实体或您表单中的其他内容)。

然后将此实体传递到树枝视图以形成请求答案。与实体一起,您可能希望提供从$form->createView() FormView对象获取的表单错误。

相关问题