在没有实际提交的情况下强制进行 Symfony 表单验证

Forcing Symfony form validation without actual submission

是否可以强制手动执行表单字段验证?

我有一个表格。它具有全局表单验证。如果用户提交数据,一切正常。

但我想在向用户显示表单之前触发验证 - 在提交之前显示错误。

尝试使用 $form->submit([]) 方法提交,但未触发表单字段验证。

关于这个问题有什么想法吗?我是不是做错了什么?

在显示表单之前调用 $form->isValid();

但是如果数据来自外部服务,我宁愿阻止(例如ws验证)用户通过ws提交错误数据(ws=外部服务)

您是否需要仅通过表单验证数据?验证器服务不适合您吗?

喜欢

$violations = $this->get('validator')->validate($entity);

原因很复杂,也很简单。

// form instantiation

$type = new MyType();

$options = [
    'csrf_protection'=>!empty($_POST[$type->getName()])
];

$form = $this->createForm($type, [/* or entity */], $options);
$form->handleRequest($request);

if(!$form->isSubmitted()){
    $form->submit([]);
}

现在我可以正确地看到错误了。最棘手的部分之一是我不知道表单 $options 在创建后是只读的,如果你想打开 CSRF 保护,empty 检查是强制性的。