在没有实际提交的情况下强制进行 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
检查是强制性的。
是否可以强制手动执行表单字段验证?
我有一个表格。它具有全局表单验证。如果用户提交数据,一切正常。
但我想在向用户显示表单之前触发验证 - 在提交之前显示错误。
尝试使用 $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
检查是强制性的。