2013-05-26 58 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'