- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个缓存站点,其中有一个不应缓存的表单。我为此使用 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/
我想将 ESI 包含或 eval 块的结果存储在 ESI 变量中。包含的内容超出了我的控制范围。其格式为 JSON。 我已经尝试了以下所有方法都无济于事。该变量最终为空字符串。 '' ''
lea 0x0(%esi),%esi 我相信它没有结果,只是填充空间。是这种情况吗? 最佳答案 它是一个 NOP。它将 %esi 和 0x0 的内容相加,并将结果放在 %esi 中。有人要么有一
我正在做家庭作业。我们得到了一个预编译的二进制文件,我们必须使用 gdb获取程序集转储、遍历数据结构、查看存储在内存中的值等,以便弄清楚二进制文件的作用。以下是来自函数调用的几行反汇编程序转储: 0x
我有一个缓存站点,其中有一个不应缓存的表单。我为此使用 ESI。提交表单后,我需要在我的 Controller 中获取 POST 参数。 Symfony 让我得到请求参数“表单”而不是真正的 POST
包含5个esi:include的页面,每个src都是一条具有相同参数的相同路径,例如'm.htm?p = 1'和'm.htm?p = 2',但是我使用了varnishlog并仅看到发生了1个esi请求
大家好。我在 Varnish 上使用 Edge Side Includes 来缓存静态 HTML shell,然后包含一些动态 HTML 和 JSON 对象。 HTML 的 ESI 已正确包含,但 J
使用 ESI 是一种好的做法还是一种较旧的技术?有没有更好的选择。我熟悉 CDN 和缓存服务器的使用,但此 ESI 通常用于不仅仅加载前端的应用程序。 最佳答案 ESI 在 CDN 上下文之外相当不为
我正在计划我的缓存策略并深入研究 ESI看看它是否符合我的需求。 今天出现了这些问题: 每个包含是串行执行还是并行执行?假设我有 5 个:{% render '...' with {}, {'stan
说明 下面列出了当前在 PCRE 中可能使用的修正符。括号中是这些修正符的内部 PCRE 名。修正符中的空格和换行被忽略,其它字符会导致错误。 i (PCRE_CASELESS) 如果设定此修正符
这可能是不可能的,如果是这种情况,那么我将不得不寻找其他解决方案,所以如果无法完成,请告诉我。 我知道我可以获得 1=master 或 2=sub-request 的请求类型,但是有没有办法检测请求是
我正在使用Liip Cache Control bundle处理项目中的缓存。通过使用此捆绑包,您可以像这样配置缓存: liip_cache_control: rules: -
我在使用 Varnish ESI(边缘包含)时遇到问题:有时使用 ESI 的部分会显示奇怪的字符,如下图所示: 我该如何解决这个问题?有趣的是,有时会出现此问题,但有时不会。 最佳答案 这看起来像是
我在设置 Varnish 来正确处理 ESI 包含的子请求的 session cookie 时遇到问题。 背景,SSCCE 三个文件:index.php、navigation.php 和 footer
汇编器中 EDI 和 ESI 寄存器的实际用途和用途是什么? 我知道它们用于字符串操作是为了一件事。 谁能举个例子吗? 最佳答案 SI = 来源索引 DI = 目的地索引 正如其他人所指出的,它们对字
我有以下配置: varnish (80) nginx (8080) php-fpm (9000) (使用 Apache 和 mod_php 的行为相同)我的 Varnish 配置: backend
我想知道是否存在类似私有(private) ESI 片段的东西。在 the docs我读了: “设置共享的最大年龄 - 这也将响应标记为公开” “一旦您开始使用 ESI,请记住始终使用 s-maxag
我正在设计一个与 Symfony2 博客具有相同结构的项目。 我的家显示文章并有一个侧边栏,其中有登录链接,或者如果我们登录,则链接到我们的帐户。 我的侧边栏是一个 ESI,我的问题是:如果我在主页上
目前正在尝试将 Varnish 缓存系统的 ESI 包含功能与 php 项目一起使用。在我的场景中,我需要访问 esi 标记内的 php 变量。类似于以下... This article was r
我有一个用 Varnish 缓存的 PHP 页面:http://categories.php?name=NAME . 它有一些 ESI 脚本,例如: 所有页面都有相似的页眉、页脚、侧边栏,所以我在进
我有一个电子商务应用程序,我尝试为其设置缓存 - 最初通过 Symfony2 反向代理,但最终通过生产中的 Varnish。我在 Apache2 上使用 Symfony 2.1.8。 我的问题是,当缓
我是一名优秀的程序员,十分优秀!