好的,我这么努力,但是我发现的所有事情都在常规的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的表单功能验证该表单
谢谢.