我有一个缓存站点,其中有一个不应缓存的表单。我使用 ESI。提交表单时,我需要在控制器中获取 POST 参数。Symfony 让我得到请求参数“表单”而不是真正的 POST 数据,或者有没有一种很好的方法来获取它们。
{{ render_esi(controller('MyBundle:Form:staticForm', {'form': 'sidebar'}))}}
由于父页面缓存,将它们设置在 twig 中将不起作用。
{{ render_esi(controller('MyBundle:Form:staticForm', {'form': 'sidebar', 'request': }))}}
那么如何在我的控制器中获取 post 参数,这里显示的代码只能获取 ESI 数据:
public function staticFormAction(Request $request) {
// ..
$form->handleRequest($request);// will not work because:
$request->get('firstName'); // is empty when called by ESI
如何从父请求中获取参数?
哈克解决方案
目前我发现的唯一解决方案对我来说太 hacky
TWIG:
{{ 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 更改为 Post,所以我的问题是知道“如何将 ESI 称为 POST 方法而不是 GET? ”
解决方案
Chris Tickner
使用像张贴的requestStack似乎是发布解决方案。