如何在树枝中呈现CSRF输入?

Ond*_*ták 42 php csrf symfony twig

我知道有渲染CSRF与令牌隐藏输入常用的方式form_rest,但有没有办法使刚刚 CSRF输入自己?我{% block field_widget %}在主题中重写了渲染一段额外的文本.但是当CSRF令牌也在输入字段中呈现时,我得到了一段文本,我不需要在隐藏字段旁边.所以我想用一个告诉它不要渲染这个文本的参数来单独渲染它.

Hen*_*kov 93

你可以做到 {{ form_widget(formView._token) }}


pli*_*kou 50

如果你有formView对象,你可以使用Twig函数渲染它:

{{ form_widget(formView._token) }} 
Run Code Online (Sandbox Code Playgroud)

如果还没有 - 您可以直接呈现令牌而不使用表单对象:

<input type="hidden" name="token" value="{{ csrf_token('some-name') }}">
Run Code Online (Sandbox Code Playgroud)

适用于Symfony 2.x和3.x.

要验证令牌,您可以在控制器中使用以下代码(Symfony 3.x):

$submittedToken = $request->request->get('token');

if ($this->isCsrfTokenValid('some-name', $submittedToken)) {
    // ... do something,
}
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,对我不起作用:( 我在 Symfony 3.1 中得到“只有在 FormRenderer::__construct() 中注入 CsrfTokenManagerInterface 时才能生成 CSRF 令牌。”但是哪个 FormRenderer ?我不想使用任何表单。 (2认同)

小智 18

或者你可以简单地使用它:

{{ form_row(form._token) }}
Run Code Online (Sandbox Code Playgroud)

这将根据您使用的表单类型自动生成正确的隐藏HTML元素,即正确的HTML结构和字段名称.