我在所有网站页面都有简单的表格:用户名、密码、[登录]
我试图用简单的 HTML 来制作,但我得到了
The CSRF token is invalid. Please try to resubmit the form
在每个动作中形成形式的想法似乎很糟糕。做网站范围表格的好习惯是什么?
你必须这样做:
首先,我猜你有一些基本模板文件,比如 layout.html.twig 并且所有其他页面都扩展了它。例如:
// Resources/views/layout.html.twig
<doc ... bla blah>
<title>My site</title>
...(js, css)...
<body>
<div id="top">
{% render url("site_wide_form") %}
</div>
{% block content %}
{% endblock content %}
</body>
您需要可以处理您的表单的控制器:
//Controller/SitewideController.php
/**
* @Route("/some/url/here", name="site_wide_form")
* @Template("yourbudle:folder:site_wide_form.html.twig")
*/
public function someAction()
{
..... your code for form, process submission etc ...
return ["form"=>$form->createView()] ;
}
和模板文件:
// site_wide_form.html.twig
<form action="{{ path("site_wide_form") }}" method="post">
{{ form_widget(form) }}
</form>
而已。阅读本文以了解渲染标签:http ://symfony.com/doc/2.2/book/templating.html#embedding-controllers
CSRF 令牌丢失。在您的模板中(我假设您使用 Twig)。您可以使用以下命令告诉 Symfony2 渲染所有剩余的表单元素:
{{ form_rest(form) }}
或者你可以只渲染 CSRF 令牌:
{{ form_row(form._token) }}