我有一个缓存的网站,它有一个不应该被缓存的形式。我使用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