在Symfony2中手动创建表单,但仍然可以使用其CSRF和isValid()

前端之家收集整理的这篇文章主要介绍了在Symfony2中手动创建表单,但仍然可以使用其CSRF和isValid()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
好的,我这么努力,但是我发现的所有事情都在常规的Symfony表单处理(例如form_widget(),创建FormType类等)的上下文中讨论Symfony表单.我的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的表单功能验证该表单

谢谢.

解决方法

我认为你在这里的意图不一致(参数传递给您的CSRF提供商).我尝试生成表单,如上所述,突破了代码生成.价值未知.

所以,尝试传递未知而不是形式到您的generateCsrfToken调用,并希望它应该工作.

猜你在找的HTML相关文章