我有一個緩存的網站,它有一個不應該被緩存的形式。我使用ESI。提交表單時,我需要在我的控制器中獲取POST參數。 Symfony讓我得到Request Parameter'form'而不是真正的POST數據,或者有一個很好的方法來獲取它們。Symfony ESI獲取表單提交或調用ESI作爲POST POST參數
{{ render_esi(controller('MyBundle:Form:staticForm', {'form': 'sidebar'}))}}
由於父頁面緩存的原因,在樹枝中設置它們將不起作用。
{{ render_esi(controller('MyBundle:Form:staticForm', {'form': 'sidebar', 'request': }))}}
因此,如何能在這個控制器後參數目前這裏顯示的代碼只讓我的ESI數據:
public function staticFormAction(Request $request) {
// ..
$form->handleRequest($request);// will not work because:
$request->get('firstName'); // is empty when called by ESI
如何我可以從父請求的參數?
哈克解決方案
目前我發現的唯一的解決辦法是對我來說太哈克
嫩枝:
{{ render_esi(controller('ClientWebsiteBundle:Form:staticForm', app.request.request.all|merge({'form': 'sidebar'}), app.request.query.all)) }}
PHP:
$data = ($request->get('myFormName'));
if (count($data)) {
// Forms uses $request->request
$request->request->set('myFormName', $data);
$request->setMethod('POST');
}
附加
經過一點研究,看看symfony核心代碼,我需要將ESI更改爲發佈,所以我的問題是知道「如何調用ESI作爲POST方法不GET?「
解決方案
使用requestStack像Chris Tickner
發佈似乎後的溶液
此外,大多數情況下,您可能不應該將發佈數據放入ESI中,這可能是敏感數據,可能會與您的母版頁一起緩存,也就是說,所有請求都會有效地「發佈」相同的數據,原因是你的破解不安全 – 2015-01-22 03:41:55
沒有在ESI中發佈數據,你的意思是我的render_esi函數的調用與app.request ...?我想我不會需要這個時使用requestStack目前requestStack適用於我的Dev但似乎我的發佈請求被緩存在生產中,當我修復這個問題時似乎是一個很好的解決方案。 – 2015-01-22 07:57:57