From 7f429f3b2be1dd3f3c0de2d236faa985891fd819 Mon Sep 17 00:00:00 2001 From: Michael Hirschler Date: Thu, 28 May 2026 10:58:22 +0200 Subject: [PATCH] Bugfix: automatically detect url type generation for varnish --- .../FOSHttpCacheExtension.php | 9 +++-- .../FOSHttpCacheExtensionTest.php | 33 +++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/DependencyInjection/FOSHttpCacheExtension.php b/src/DependencyInjection/FOSHttpCacheExtension.php index 417017a5..5f9e73b9 100644 --- a/src/DependencyInjection/FOSHttpCacheExtension.php +++ b/src/DependencyInjection/FOSHttpCacheExtension.php @@ -745,9 +745,12 @@ private function determineGenerateUrlType(array $config): int } $defaultClient = $this->getDefaultProxyClient($config['proxy_client']); - if ('noop' !== $defaultClient - && array_key_exists('base_url', $config['proxy_client'][$defaultClient])) { - return UrlGeneratorInterface::ABSOLUTE_PATH; + if ('noop' !== $defaultClient) { + $clientConfig = $config['proxy_client'][$defaultClient]; + $hasBaseUrl = !empty($clientConfig['base_url'] ?? null) || !empty($clientConfig['http']['base_url'] ?? null); + if ($hasBaseUrl) { + return UrlGeneratorInterface::ABSOLUTE_PATH; + } } if ('cloudfront' === $defaultClient) { return UrlGeneratorInterface::ABSOLUTE_PATH; diff --git a/tests/Unit/DependencyInjection/FOSHttpCacheExtensionTest.php b/tests/Unit/DependencyInjection/FOSHttpCacheExtensionTest.php index 174387a9..2e664d1f 100644 --- a/tests/Unit/DependencyInjection/FOSHttpCacheExtensionTest.php +++ b/tests/Unit/DependencyInjection/FOSHttpCacheExtensionTest.php @@ -28,6 +28,7 @@ use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\ExpressionLanguage\ExpressionLanguage; use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Routing\Router; class FOSHttpCacheExtensionTest extends TestCase @@ -53,6 +54,38 @@ public function testConfigLoadVarnish(): void $this->assertTrue($container->hasDefinition('fos_http_cache.event_listener.tag')); } + public function testVarnishWithBaseUrlAutoResolvesAbsolutePath(): void + { + $container = $this->createContainer(); + $this->extension->load([$this->getBaseConfig()], $container); + + $this->assertSame( + UrlGeneratorInterface::ABSOLUTE_PATH, + $container->getParameter('fos_http_cache.cache_manager.generate_url_type'), + 'Varnish with base_url must auto-resolve to ABSOLUTE_PATH so the Host header uses base_url, not the CMS request hostname.' + ); + } + + public function testVarnishWithoutBaseUrlAutoResolvesAbsoluteUrl(): void + { + $container = $this->createContainer(); + $config = [ + 'proxy_client' => [ + 'varnish' => [ + 'http' => [ + 'servers' => ['127.0.0.1'], + ], + ], + ], + ]; + $this->extension->load([$config], $container); + + $this->assertSame( + UrlGeneratorInterface::ABSOLUTE_URL, + $container->getParameter('fos_http_cache.cache_manager.generate_url_type') + ); + } + public function testConfigLoadVarnishCustomClient(): void { $container = $this->createContainer();