Forms 如何在不绑定请求的情况下触发表单验证?

Forms 如何在不绑定请求的情况下触发表单验证?,forms,validation,symfony,Forms,Validation,Symfony,我有一个很长的订单,可以保存草稿。如果保存为草稿,则只需要订单名称,但在实际下订单时,需要进行更彻底的验证。我通过使用不同的验证组实现了这一点。编辑订单时,我会显示两个按钮:“保存草稿”和“下订单”。它们中的每一个都使用不同的验证组执行验证 但是现在我想在订单列表上做一个按钮,可以直接将订单状态从“草稿”更改为“已下订单”。为此,必须在不显示和提交编辑表单的情况下执行验证。我只想验证数据库中已经存在的实体。我可以使用验证器服务,只要数据有效,一切都很简单。但如果数据无效,我想将用户重定向到编辑表

我有一个很长的订单,可以保存草稿。如果保存为草稿,则只需要订单名称,但在实际下订单时,需要进行更彻底的验证。我通过使用不同的验证组实现了这一点。编辑订单时,我会显示两个按钮:“保存草稿”和“下订单”。它们中的每一个都使用不同的验证组执行验证

但是现在我想在订单列表上做一个按钮,可以直接将订单状态从“草稿”更改为“已下订单”。为此,必须在不显示和提交编辑表单的情况下执行验证。我只想验证数据库中已经存在的实体。我可以使用验证器服务,只要数据有效,一切都很简单。但如果数据无效,我想将用户重定向到编辑表单,并突出显示缺少数据的字段。这种想法似乎是将数据库中的数据加载到表单中,并像使用浏览器发送数据一样运行验证,但执行这种方法似乎并不简单,因为Symfony2仅在绑定请求时才会触发表单验证


我在浏览Symfony源代码时发现了一个名为Symfony\Component\Form\Extension\Validator\EventListener\ValidationListener的类。它似乎附加在FormEvents::POST_SUBMIT事件上。是否有一种方法可以在不绑定请求的情况下从控制器手动触发此事件?或者有没有其他方法来解决我的问题

请指出MatjažDrolc在评论中已经给出的正确答案:

如果要在不从请求中获取数据的情况下验证表单,则必须调用
表单->提交()
函数,因为如果字段未标记为
已提交
,Symfony不会验证字段,这是由该函数完成的

像这样调用函数

$form->submit(array(), false);

以空数组作为提交的数据,并且不清除缺少的字段。

很抱歉。即使您明确表示不想绑定请求,我的回答仍然需要您这样做。但我认为我的解决方案没有任何问题。即使未从编辑表单调用您,也可以绑定请求。如果您使用csrf_保护,因为$form->submit希望在提交的数据中看到csrf令牌,则此操作无效