PHPackages                             alengo/sulu-http-cache-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. alengo/sulu-http-cache-bundle

ActiveSymfony-bundle[HTTP &amp; Networking](/categories/http)

alengo/sulu-http-cache-bundle
=============================

HTTP cache helpers for Sulu/Symfony: strip tracking query parameters and store CTA marketing-attribution cookies at the reverse-proxy layer.

0.1(yesterday)03↑2900%MITPHPPHP ^8.2

Since Jun 18Pushed yesterdayCompare

[ Source](https://github.com/alengodev/SuluHttpCacheBundle)[ Packagist](https://packagist.org/packages/alengo/sulu-http-cache-bundle)[ Docs](https://github.com/alengodev/SuluHttpCacheBundle)[ RSS](/packages/alengo-sulu-http-cache-bundle/feed)WikiDiscussions main Synced today

READMEChangelog (1)Dependencies (9)Versions (2)Used By (0)

alengoHttpCacheBundle
=====================

[](#alengohttpcachebundle)

HTTP-cache helpers for Sulu / Symfony, wired onto the FOS `EventDispatchingHttpCache`(reverse-proxy) kernel:

- **StripQueryParametersSubscriber** — removes tracking query parameters (`utm_*`, `gclid`, `fbclid`, …) at `PRE_HANDLE`, before the cache key is computed, so tracking-param URL permutations collapse onto a single cache entry.
- **CtaInterestsSubscriber** — stores matched tracking parameters in a cookie (default `cta_interests`) for marketing attribution.
- **CtaRefererSubscriber** — stores an external referer in a cookie (default `cta_referer`).

The CTA cookies are written in `POST_HANDLE` (after the store decision) so they are set per response and never baked into a cached page.

Installation
------------

[](#installation)

```
composer require alengo/sulu-http-cache-bundle
```

Register the bundle (Symfony Flex does this automatically):

```
// config/bundles.php
Alengo\SuluHttpCacheBundle\AlengoHttpCacheBundle::class => ['all' => true],
```

Wiring
------

[](#wiring)

The subscribers run on the reverse-proxy cache kernel, which is created in the front controller / `Kernel::getHttpCache()` *before* the DI container is available. Wire them with the provided configurator:

```
use Alengo\SuluHttpCacheBundle\Cache\CacheKernelConfigurator;

public function getHttpCache(): HttpKernelInterface
{
    if (!$this->httpCache instanceof HttpKernelInterface) {
        $cache = new SuluHttpCache($this);

        (new CacheKernelConfigurator())->configure(
            $cache->getEventDispatcher(),
            $this->getProjectDir(),
            $this->getEnvironment(),
        );

        $this->httpCache = $cache;
    }

    return $this->httpCache;
}
```

Configuration
-------------

[](#configuration)

All settings live in `config/packages/alengo_http_cache.yaml`. The configurator reads this file directly at runtime (no container), so keep the values inline — cross-file imports and `%env()%` placeholders are not resolved. Defaults are applied for anything omitted.

```
alengo_http_cache:
    strip_query_parameters:
        enabled: true
        # deny_list: ['utm_[a-z]+', 'gclid', ...]   # defaults to the built-in tracking list
        # allow_list: []
    cta_interests:
        enabled: true
        cookie_name: cta_interests
        # allow_list: [...]                          # defaults to the built-in tracking list
    cta_referer:
        enabled: true
        cookie_name: cta_referer
```

Each subscriber can be switched off with `enabled: false`. The resolved cookie names are also exposed as the container parameters `alengo_http_cache.cta_interests.cookie_name` and `alengo_http_cache.cta_referer.cookie_name` for container-side consumers (e.g. a form controller that reads the cookie).

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance100

Actively maintained with recent releases

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity35

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

1d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/4a3bea97975bdeddcfa5b76c222740e703e4ff5f9bbf5f6d5d75e8827e0a48ac?d=identicon)[alengodev](/maintainers/alengodev)

---

Top Contributors

[![hual7](https://avatars.githubusercontent.com/u/89628357?v=4)](https://github.com/hual7 "hual7 (1 commits)")

---

Tags

symfonymarketingsulufoshttp-cache

###  Code Quality

Static AnalysisRector

### Embed Badge

![Health badge](/badges/alengo-sulu-http-cache-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/alengo-sulu-http-cache-bundle/health.svg)](https://phpackages.com/packages/alengo-sulu-http-cache-bundle)
```

###  Alternatives

[easycorp/easyadmin-bundle

Admin generator for Symfony applications

4.3k17.5M373](/packages/easycorp-easyadmin-bundle)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.4M196](/packages/sulu-sulu)[symfony/framework-bundle

Provides a tight integration between Symfony components and the Symfony full-stack framework

3.6k246.0M11.1k](/packages/symfony-framework-bundle)[symfony/security-bundle

Provides a tight integration of the Security component into the Symfony full-stack framework

2.5k181.3M2.2k](/packages/symfony-security-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
