Silex提供了自动为表单使用CRSF保护的功能。问题是当使用提供的HttpCacheProvider缓存时不可能不缓存生成的令牌,所以解决方案是使用esi,但我无法使其工作。我尝试了2个动作,一个用包含esi代码的twig和一个用于呈现CRSF令牌的form._token:
<esi:include src="/form" />
{{ form_row(form._token) }}
和包含表单其余部分的操作“表单”,但现在不显示验证错误。 这甚至可能吗?这是正确的方式吗?
答案 0 :(得分:1)
为/ form提出的请求不会显示验证错误,因为它会导致向您的后端发出单独的http请求,该请求不知道提交的表单数据或父请求产生的验证错误。
一般不太了解silex或php,我建议仅将ESI结构用于加载表单的可缓存get请求(以便始终获得新的CSRF令牌),并使用php include包含片段在响应表单提交上的不可缓存的PHP帖子时。伪代码看起来像:
if request.method == "GET"
print '<esi:include src="/form" />'
else if request.method == "POST"
include 'form.php'