我有一个非常长的订单表格,可以保存草稿。如果保存为草稿,则只需要订单名称,但在实际下订单时,需要进行更彻底的验证。我通过使用不同的验证组实现了这一点。编辑订单时,我会显示两个按钮:“保存草稿”和“下订单”。他们每个人都使用不同的验证组进行验证。
但现在我想在订单列表上创建一个按钮,可以直接将订单状态从“草稿”更改为“已放置”。为此,必须执行验证而不显示编辑表单并提交。我只想验证已存在于数据库中的实体。我可以使用验证器服务,只要数据有效,一切都很简单。但是如果数据无效,我想将用户重定向到编辑表单,其中突出显示缺少数据的字段。这个想法似乎是将数据从数据库加载到表单中并运行验证,好像数据是使用浏览器发送的,但执行此操作似乎并不简单,因为Symfony2仅在绑定请求时触发表单验证。
我正在浏览Symfony源代码并找到了一个名为Symfony \ Component \ Form \ Extension \ Validator \ EventListener \ ValidationListener的类。它似乎附加在FormEvents :: POST_SUBMIT事件上。有没有办法在没有请求绑定的情况下从控制器手动触发此事件?或者我的问题还有其他方法吗?
答案 0 :(得分:2)
只是指出MatjažDrumc在评论中已经给出的正确答案:
如果要在不从请求中获取数据的情况下验证表单,则必须调用form->submit()
函数,因为如果字段未标记为submitted
,Symfony不会验证字段,由这个功能完成。
像这样调用函数
$form->submit(array(), false);
将空数组作为提交的数据,而不是清除缺少的字段。