Symfony CSRF令牌丢失
这让我发疯 以这些代码片段为例Symfony CSRF令牌丢失,symfony,twig,Symfony,Twig,这让我发疯 以这些代码片段为例 class CommonController extends Controller { /** * Create delete form * * @param int $id * * @return Form */ protected function createDeleteForm($id) { return $this->createFormBuilde
class CommonController extends Controller
{
/**
* Create delete form
*
* @param int $id
*
* @return Form
*/
protected function createDeleteForm($id)
{
return $this->createFormBuilder(['id' => $id])
->add('id', \Symfony\Component\Form\Extension\Core\Type\HiddenType::class)
->getForm()
;
}
}
及
{%如果定义了删除路径%}
{{form_小部件(deleteForm)}
{{删除表格{提交按钮}
{%endif%}
请注意,这不是伪代码,而是我在一个应用程序中发现的真实代码,我的一个朋友让我修复
我的问题是。。。为什么视图中不显示CSRF令牌?因此,由于csrf令牌丢失,我的表单提交始终无效 更多细节
- Symfony版本:2.8
- 即使我使用了
标记,它仍然不在那里,所以看起来好像根本没有生成,但在引擎盖下,它应该在那里(form\u rest
)isValid()
- 如果我转储
,删除表单
存在,但如果我尝试使用\u令牌
或表单小部件
或表单行
则不会显示表单rest
- 如果我不使用
或form\u小部件(deleteForm)
,则会显示中的令牌form\u行(deleteForm.id)
{form_widget(deleteForm._token)}
怎么样?@PawełMikołajczuk:不,这不会产生任何东西,这是配置.yml
中设置的csrf.protection
和其他表单上正确呈现的csrf令牌?非常奇怪的是,form\u小部件(deleteForm.\u令牌)
或form\u行(deleteForm.\u令牌)
没有产生任何结果,我在2.8项目上尝试了你的代码,效果很好。你能提供更多的模板代码吗?也可能是表单处理。@chalasr是的,其他表单按预期工作。今晚或明天我会提供更多的代码,但我对symfony很有经验,我不会做任何奇怪或“黑客”的事情@DonCallisto我对此毫无疑问。有些东西破坏了令牌呈现,我正在考虑与delete表单冲突的其他表单(或其他元素)。可能尝试在当前模板之外使用它(没有任何其他标记)。
{% if delete_path is defined %}
<form id="delete" action="{{ path(delete_path, {id: entity.id}) }}" method="POST" class="pull-right" style="margin-top: -43px; margin-right: 10px;">
{{ form_widget(deleteForm) }}
<button type="submit" class="btn btn-default">{{ delete_form_submit_button|trans }}</button>
</form>
{% endif %}