好的,我用谷歌搜索了这个,但我发现的所有内容都是在常规 Symfony 表单处理的上下文中谈论 Symfony 表单(例如 form_widget()、创建 FormType 类等)。我的 Symfony 项目中有很多这样的表格,它们工作得很好。
但:
我还有一些非常复杂的 AJAX 表单,我想手动构建(使用普通的旧 HTML 和 JS)。我仍然想利用 Symfony 的表单验证功能和 CSRF 保护。但是,由于某种原因,在将 isValid() 用于手动创建的表单时,我无法使 CSRF 工作。
这是我想要完成的一个例子:
在我的视图控制器中,我设置了 _token:
$_token = $this->get('form.csrf_provider')->generateCsrfToken('form');
在我看来(手动创建的表单)(从我的视图控制器获取 _token):
<html>
<form method="post">
<input type="hidden" name="form[_token]" value="{{ _token }}">
<input type="hidden" name="form[id]" value="1">
<input type="submit" value="Submit">
</form>
</html>
在我的动作控制器中(提交表单时,我正在尝试执行以下操作):
//Create form (for validation purposes)
$form = $this->get('form.factory')
->createBuilder('form', array('id' => $request->get('id')))
->add('id', 'hidden')
->getForm();
//Bind form
$form->bind($request)
//Validate form
if($form->isValid()) {
//... save data
}
//Return response...
出于某种原因,我无法让 isValid() 工作,我怀疑我的 _token 是没有正确使用的东西,但我不知道为什么。有没有人真正让手动表单与 Symfony 组件一起工作?有人对如何使这项工作有任何建议吗?
基本上,我想要完成的是:
手动创建 HTML 表单(具有 CSFR 保护且没有TWIG 表单小部件功能)
使用 Symfony 的表单功能来验证该表单
谢谢你。