使用Symfony2的站点范围内的表单?

时间:2013-05-18 20:42:59

标签: forms csrf symfony

我在所有网站页面都有简单的表格:用户名,密码,[登录]

我尝试用简单的HTML制作,但我得到了

The CSRF token is invalid. Please try to resubmit the form

在每个动作中制作表单的想法似乎很糟糕。做网站范围表格的好习惯是什么?

2 个答案:

答案 0 :(得分:1)

你必须这样做:

首先,我猜你有一些像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

答案 1 :(得分:0)

缺少CSRF令牌。在你的模板中(我假设你使用Twig)。您可以使用以下命令告诉Symfony2渲染所有剩余的表单元素:

{{ form_rest(form) }}

或者您只能渲染CSRF令牌:

{{ form_row(form._token) }}