php - Symfony ESI 获取 FORM 提交的 POST 参数或调用 ESI 作为 POST

标签 php symfony symfony-forms esi

我有一个缓存站点,其中有一个不应缓存的表单。我为此使用 ESI。提交表单后,我需要在我的 Controller 中获取 POST 参数。 Symfony 让我得到请求参数“表单”而不是真正的 POST 数据,或者有没有好的方法来获取它们。

{{ render_esi(controller('MyBundle:Form:staticForm', {'form': 'sidebar'}))}}

由于父页面缓存,将它们设置在 twig 中将不起作用。

{{ render_esi(controller('MyBundle:Form:staticForm', {'form': 'sidebar', 'request': }))}}

那么目前如何在我的 Controller 中获取 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,所以我的问题是“How to call ESI as POST method not GET?

解决方案

使用像 Chris Tickner 发布的 requestStack 似乎是后期解决方案。

最佳答案

ESI 是边缘端包含,这意味着它旨在处理 POST 数据。默认情况下,像 Varnish 或 Symfony 的 HttpCache 内核这样的反向代理,将 ESI 视为一个 URL(“/_proxy?_controller=x¶ms=etc”),它们通过从您的应用程序获取它来包含它。这就是为什么你觉得这很困难。

但是,没有代理会缓存 POST 请求,因此您可以在 POST 请求期间使用 request_stack 服务访问主请求。

// if POST
$master_request = $this->get('request_stack')->getMasterRequest();
$form->handleRequest($master_request);

如果您使用的是 Symfony HttpCache,这应该可以解决问题。

http://api.symfony.com/2.7/Symfony/Component/HttpFoundation/RequestStack.html

关于php - Symfony ESI 获取 FORM 提交的 POST 参数或调用 ESI 作为 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28065440/

相关文章:

php - WordPress的。使文章元素更大

Symfony:我如何从 Controller 运行命令?

php - Symfony 5 带有集合一对一关系的嵌入表单出现错误

php - 如何在 symfony 表单中对表单类型使用组序列?

macos - 如何使用 MAMP 从命令行运行 PHP 脚本?

php - Laravel 选择行有一列包含输入变量

Symfony2 : accessing entity fields in Twig with an entity field type

php - Symfony3 - 从 yaml 文件动态下拉

symfony - 如何在 Symfony 中的表单中添加未绑定(bind)的字段,否则绑定(bind)到实体?

php - 检查表行中是否存在记录