检测请求是否是 ESI - Symfony2

2024-03-22

这可能是不可能的,如果是这种情况,那么我将不得不寻找其他解决方案,所以如果无法完成,请告诉我。

我知道我可以获得请求类型,即 1=主请求或 2=子请求,但是有没有办法检测该请求是否是 ESI 请求?

我的理解是ESI永远是一个子请求,但是有很多不同的子请求。我需要我的响应侦听器来检测哪些肯定是 ESI 请求。

通常我的 ESI 请求将来自 Twig 中的 {{render_esi() }} 调用。

当然,我可以附加一个查询参数或其他东西,但如果可能的话,我宁愿能够在没有这个参数的情况下进行检测。


我意识到这个问题非常古老,从那时起您可能已经找到了解决方案,但是,最近我遇到了同样的问题,解决方法是更换FragmentListener类与我自己的并设置一个属性Request目的。感谢@Johnny 的FragmentListener hint.

像下面这样:

php 类:

<?php
namespace Your\Namespace\Here;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\EventListener\FragmentListener as SymfonyFragmentListener;

class FragmentListener extends SymfonyFragmentListener
{
    private $signer;
    private $fragmentPath;

    /**
     * {@inheritdoc}
     */
    public function __construct(UriSigner $signer, $fragmentPath = '/_fragment')
    {
        parent::__construct($signer, $fragmentPath);

        $this->signer = $signer;
        $this->fragmentPath = $fragmentPath;
    }

    /**
     * {@inheritdoc}
     */
    public function onKernelRequest(GetResponseEvent $event)
    {
        $request = $event->getRequest();

        if (
            $request->attributes->has('_controller')
            || $this->fragmentPath !== rawurldecode($request->getPathInfo())
        ) {
            return;
        }
        $event->getRequest()->attributes->set('esi', true);

        parent::onKernelRequest($event);
    }
}

服务定义:

<?xml version="1.0" ?>
<container 
    xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"
    >

    <parameters>
        <parameter key="fragment.listener.class">Your\Namespace\Here\FragmentListener</parameter>
    </parameters>
</container>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测请求是否是 ESI - Symfony2 的相关文章

随机推荐

  • 如何使用 Spring 和 Hibernate 5 注册实体事件监听器

    现在 我想将我的应用程序从 Spring Hibernate 3 升级到 5 在 hibernate 3 下 我创建一个 POST COMMIT INSERT UPDATE DELETE 事件监听器 如下所示
  • JavaScript 中的 init() 用法有什么用?

    的含义和用法是什么init JavaScript 中的函数 JavaScript 没有内置的init 函数 也就是说 它不是语言的一部分 但个体程序员创建自己的语言并不罕见 在很多语言中 init 用于初始化的函数 一个特定的init 函数
  • 防止 angularjs 动画在加载时最初隐藏的元素上运行[重复]

    这个问题在这里已经有答案了 http codepen io cflynn07 pen hbgxf http codepen io cflynn07 pen hbgxf 示例 我有一个 angularjs 动画 我不希望它在页面加载时运行应该
  • Dart:类型“Null”不是 Mockito 中类型“Future”的子类型

    下面的代码曾经在 null 安全之前工作 但现在我得到 类型 Null 不是类型 Future 的子类型 我完全不知道为什么以及该怎么做 请帮忙 这应该非常容易 除了我 因为您只需复制代码并将其作为测试运行即可获得异常 import pac
  • 正则表达式.test

    var regExpression a zA Z0 9 line 2 var regExpression a zA Z0 9 line 3 alert regExpression test 11aa 上面的代码工作正常 但是如果我们用第 3
  • 我们可以使用具有相同字段名的 group by 和 where 条件吗

    我有一个要求 比如必须提取用户选择的日期范围内的所有记录 选择从 2011 年 1 月 15 日到 2011 年 8 月 20 日开始的所有员工并按日期分组 我应该如何为此编写 SQL 查询 SELECT FROM employees WH
  • Matlab:从命令窗口重命名工作区元素?

    Matlab 的 GUI 允许我通过右键单击元素并选择 重命名 选项来重命名工作区中的任何元素 是否也可以从命令窗口执行此操作 这些是您可以轻松亲自测试的事情 并且您应该这样做 这是学习 发现的最佳方式 无论如何 答案是否定的 您不能从命令
  • 为什么具有非常高索引号的 JavaScript 数组会导致崩溃/减慢/麻烦?

    基本上破坏我的 Node js Express 服务器的代码是这样的 resultArr resultArr test resultArr test 2015073012 someObject 当我将其更改为此时 它运行没有问题 resul
  • 大量 XML 编辑

    我需要将一个中等大小的 XML 文件加载到内存中 对该文件进行多次随机访问修改 可能是数十万次 然后将结果写入 STDIO 大多数这些修改将是节点插入 删除 以及文本节点内的字符插入 删除 这些 XML 文件足够小 可以放入内存 但也足够大
  • 使用 dplyr 将一个 data.frame 的输出通过管道传输到另一个 data.frame

    我有两个 data frames 一个查找表 它告诉我一组中包含的一组产品 每组有at least类型 1 和类型 2 的一种产品 第二个 data frame 告诉我有关交易的详细信息 每笔交易可以有以下产品之一 a 唯一的产品s来自其中
  • Elastic Beanstalk -> 使用 Grails 的 RDS 连接错误

    我正在将 Grails 应用程序部署到 Amazon Web Services Elastic Beanstalk 并利用 RDS 我正在使用 Grails Spring Security RDS 表 该应用程序似乎工作正常 RDS 中的登
  • Flutter SDK 使用哪个渠道?

    预览版 1 的公告位于 宣布 Flutter 发布预览 1 Flutter Medium https medium com flutter io flutter release preview 1 943a9b6ee65a 下载 Flutt
  • 如何在 R 中进行条件“左连接”?

    我发现自己在 R 中多次执行 条件左连接 用一个例子来说明 如果您有两个数据框 例如 gt df a b 1 1 0 2 2 0 gt other df a b 1 2 3 目标是最终得到这个数据框 gt final df a b 1 1
  • 如何在另一个函数中使用 calc()

    是否可以使用calc CSS 函数内部 例如transform or translate 我似乎无法让它发挥作用 这是一个演示 大家可以玩一下 http jsfiddle net qdJwY 1 http jsfiddle net qdJw
  • 如何在 Ruby 中使用条件运算符 (?:)?

    条件运算符 在 Ruby 中使用 例如 这是正确的吗 它是三元运算符 http en wikipedia org wiki Ternary operation 其工作方式与 C 中类似 不需要括号 这是一个表达式 其工作原理如下 if th
  • C# ClickOnce 应用程序的“添加或删除程序”图标

    我已经尝试过Stack Overflow问题中的解决方案 添加或删除程序 中 ClickOnce 应用程序的自定义图标 https stackoverflow com questions 10927109 icon for click on
  • 有什么好的可视化 HTML5 编辑器或 IDE? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 看起来 Dreamweaver CS5 将在几年内 实际上是几周 尝试使 HTML5 变得更加流畅 似
  • Rails:嵌套资源冲突,如何根据调用的路由确定索引操作的范围

    假设您有两条定义的路线 map resources articles map resources categories has many gt articles 两者都可以通过助手 路径访问 articles path articles c
  • 切换列表字典中的键和值

    大家好 Stackoverflow 我有一个嵌套字典 其中列表作为值 我想创建一个字典 其中所有列表条目都将其相应的键作为值 举例时间 what I have dict1 A 1 2 3 B 4 5 6 C 7 8 9 what I wan
  • 检测请求是否是 ESI - Symfony2

    这可能是不可能的 如果是这种情况 那么我将不得不寻找其他解决方案 所以如果无法完成 请告诉我 我知道我可以获得请求类型 即 1 主请求或 2 子请求 但是有没有办法检测该请求是否是 ESI 请求 我的理解是ESI永远是一个子请求 但是有很多