gpt4 book ai didi

symfony - 检测请求是否为 ESI - Symfony2

转载 作者:行者123 更新时间:2023-12-04 10:25:38 26 4
gpt4 key购买 nike

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

我知道我可以获得 1=master 或 2=sub-request 的请求类型,但是有没有办法检测请求是否是 ESI 请求?

我的理解是 ESI 将始终是一个子请求,但有许多不同的子请求。我需要我的响应监听器来检测哪些绝对是 ESI 请求。

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

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

最佳答案

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

类似于以下内容:

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>

关于symfony - 检测请求是否为 ESI - Symfony2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16907576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com