Caching 用于带有CRSF的表单的Silex Esi缓存

Caching 用于带有CRSF的表单的Silex Esi缓存,caching,twig,symfony-forms,silex,esi,Caching,Twig,Symfony Forms,Silex,Esi,Silex能够自动对表单使用CRSF保护。问题是,当使用提供的HttpCacheProvider缓存时,不缓存生成的令牌是不可能的,因此解决方案是使用esi,但我无法让它工作。我尝试了两个操作,一个是使用包含esi代码和表单的细枝。\u token来呈现CRSF token: <esi:include src="/form" /> {{ form_row(form._token) }} {{form_row(form._token)} 和包含表单其余部分的操作“表单”,但现在不

Silex能够自动对表单使用CRSF保护。问题是,当使用提供的HttpCacheProvider缓存时,不缓存生成的令牌是不可能的,因此解决方案是使用esi,但我无法让它工作。我尝试了两个操作,一个是使用包含esi代码和表单的细枝。\u token来呈现CRSF token:

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

{{form_row(form._token)}
和包含表单其余部分的操作“表单”,但现在不会显示验证错误。
这可能吗?这是正确的方法吗?

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

在不太了解silex或php的情况下,我建议仅对加载表单的可缓存get请求使用ESI构造(以便始终获得一个新的CSRF令牌),并在响应表单提交时不可缓存的php帖子时使用php include包含片段。伪代码看起来像:

if request.method == "GET"
   print '<esi:include src="/form" />'
else if request.method == "POST"
   include 'form.php'
if request.method==“GET”
打印“
如果request.method==“POST”,则为else
包括“form.php”