2013-05-26 20 views
2

Silex提供了自动使用表单CRSF保护的功能。问题是,使用提供的HttpCacheProvider缓存时不可能不缓存生成的令牌,因此解决方案是使用esi,但我无法使其工作。我试图与2分的动作,一个与包含ESI代码和渲染CRSF令牌form._token树枝:Silex Esi缓存用于CRSF表格

<esi:include src="/form" /> 
{{ form_row(form._token) }} 

和行动“形式”包含表单的休息,但现在验证错误不显示。 这甚至有可能吗?这是正确的方式吗?

回答

1

为/ form提出的请求不会显示验证错误,因为它会导致您的后端单独的http请求不知道提交的表单数据或父请求产生的验证错误。

在不了解一般的关于silex或php的知识方面,我建议只使用加载表单的可缓存获取请求来使用ESI结构(以便您始终获得新的CSRF标记),并使用php包含片段包括在表单提交时响应不可缓存的PHP帖子。伪代码看起来像:

if request.method == "GET" 
    print '<esi:include src="/form" />' 
else if request.method == "POST" 
    include 'form.php'