actions/download-artifact from 8.0.0 to 8.0.1Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/7.2.0...7.2.1
auditor-bundle 7.2 aligns with
auditor4.2 andauditor-doctrine-provider1.1: it tagsDoctrineProviderwithkernel.resetso that Symfony Messenger workers audit every message correctly — not just the first one.
DoctrineProvider now implements Symfony\Contracts\Service\ResetInterface (see
auditor 4.2.0 and
auditor-doctrine-provider 1.1.0).
Without the kernel.reset tag on its service definition, Symfony's services_resetter
never calls reset() between Messenger messages, leaving stale PreparedStatement caches
and subscriber transaction state that silently break auditing after the first message in
worker processes.
The bundle now tags DoctrineProvider with kernel.reset automatically — no configuration
change is needed.
DoctrineProvider with kernel.reset for long-running processes by @Spomky in #602workflow_dispatch trigger to sync-docs workflowFull Changelog: https://github.com/DamienHarper/auditor-bundle/compare/7.1.0...7.2.0
auditor-bundle 7.1 aligns with
auditor4.1: it pulls inauditor-doctrine-provideras a direct dependency, documents the upcomingDoctrineProviderdeprecation, and ships a bug fix for zero-result translation handling.
auditor-bundle now explicitly requires
damienharper/auditor-doctrine-provider,
the new standalone package that hosts DoctrineProvider and all related Doctrine classes
— extracted from damienharper/auditor in 4.1.
No action required. The bundle wires everything transparently. All existing
dh_auditor.yamlconfigurations continue to work without modification.
Users relying on DoctrineProvider directly (without the bundle) should install it explicitly:
composer require damienharper/auditor-doctrine-provider
Filtering entities in the audit viewer to produce zero results triggered a 500 error when
using a locale with complex plural rules (e.g. Russian). The plural translation string for
%formatted_count% did not cover the 0 case, causing Symfony's translator to throw.
The translation now handles zero correctly across all supported locales.
As of damienharper/auditor 4.1, all classes under DH\Auditor\Provider\Doctrine\ are
deprecated and will be removed in auditor 5.0. auditor-bundle users are unaffected —
the bundle handles the transition automatically.
For users of DoctrineProvider outside the bundle, see
docs/upgrade/v8.md for the migration path.
auditor-doctrine-provider and document DoctrineProvider deprecation by @DamienHarper in #606Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/7.0.1...7.1.0
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/7.0.0...7.0.1
The biggest release since the bundle's creation, auditor-bundle 7.0 is a full modernization: it drops legacy compatibility layers, embraces PHP 8.4+, Symfony 8, and Doctrine 4/ORM 3 — and ships a completely redesigned audit viewer with a rich new feature set.
The built-in viewer has been rebuilt from scratch. It replaces the Webpack/npm + Bootstrap stack with AssetMapper and Tailwind CSS 4 — no Node.js toolchain required.
New viewer capabilities:
localStorage, follows system preference by defaultinsert, update, remove, associate, or dissociateblame_id IS NULL)extra_data content when present, with per-key rendering, in all entry types (insert, update, associate, dissociate)Each entity card on the home page shows a sparkline bar chart of audit volume over time.
dh_auditor:
providers:
doctrine:
viewer:
activity_graph:
enabled: true
days: 30 # 1–30
layout: 'bottom' # 'bottom' or 'inline'
cache:
enabled: true
pool: 'cache.app'
ttl: 300
Cache supports tag-based invalidation (dh_auditor.activity) when your pool implements TagAwareCacheInterface. A dedicated audit:cache:clear console command lets you flush it on demand.
The new extra_data JSON column introduced in auditor 4.0 is fully surfaced in the viewer. No template override needed: every audit entry automatically renders its extra data, decoded and formatted, in a clearly delimited section below the diff.
extra_data_provider — global context without boilerplateThe bundle ships a ready-to-use ExtraDataProvider service that captures the current route name for every audit entry. Opt in with a single config line:
dh_auditor:
extra_data_provider: dh_auditor.extra_data_provider
This stores {"route": "app_order_edit"} in extra_data for every audit entry produced during an HTTP request. Outside HTTP context (e.g. console commands), extra_data remains null.
You can also plug in any custom service that returns ?array:
dh_auditor:
extra_data_provider: App\Audit\MyExtraDataProvider
The provider runs before the LifecycleEvent is dispatched, so per-entity listeners can enrich or override the global context.
See extra-data documentation for both approaches and their interaction.
The bundle now extends Symfony\Component\HttpKernel\Bundle\AbstractBundle. The Configuration and DHAuditorExtension classes, along with four compiler passes, have been merged into DHAuditorBundle::configure() and DHAuditorBundle::loadExtension(). Services are registered programmatically — no services.yaml.
| Class | Before | After |
|---|---|---|
ConsoleEventSubscriber |
EventSubscriberInterface |
#[AsEventListener] |
ViewerEventSubscriber |
EventSubscriberInterface |
#[AsEventListener] |
ViewerController |
Manual route registration | #[AsController] + #[Route] |
TimeAgoExtension |
Extends AbstractExtension |
#[AsTwigFilter] |
RoutingLoader |
Manual tag | #[AutoconfigureTag('routing.loader')] |
SecurityProvider |
Manual constructor injection | #[Autowire] |
All bundle classes are now final. Customisation is done through the three provider interfaces (unchanged) and Symfony's service decoration, not inheritance.
The frontend toolchain switches from Webpack Encore / npm to Symfony AssetMapper. No node_modules, no build step. Assets are served directly from public/bundles/dhauditor/.
| 6.x | 7.0 | |
|---|---|---|
| PHP | ≥ 8.2 | ≥ 8.4 |
| Symfony | ≥ 5.4 | ≥ 8.0 |
| Doctrine DBAL | ≥ 3.2 | ≥ 4.0 |
| Doctrine ORM | ≥ 2.13 | ≥ 3.2 |
| DoctrineBundle | ≥ 2.0 | ≥ 3.0 |
| damienharper/auditor | ≥ 3.0 | ≥ 4.0 |
| PHPUnit | ≥ 11.0 | ≥ 12.0 |
| Removed class | Replacement |
|---|---|
DH\AuditorBundle\DependencyInjection\Configuration |
DHAuditorBundle::configure() |
DH\AuditorBundle\DependencyInjection\DHAuditorExtension |
DHAuditorBundle::loadExtension() |
DH\AuditorBundle\DependencyInjection\Compiler\AddProviderCompilerPass |
Autowiring |
DH\AuditorBundle\DependencyInjection\Compiler\CustomConfigurationCompilerPass |
DHAuditorBundle::loadExtension() |
DH\AuditorBundle\DependencyInjection\Compiler\DoctrineProviderConfigurationCompilerPass |
DoctrineMiddlewareCompilerPass |
| Before (6.x) | After (7.0) |
|---|---|
dh_auditor_show_entity_history |
dh_auditor_show_entity_stream |
dh_auditor_show_transaction |
dh_auditor_show_transaction_stream |
Update any route references in your application.
CLI commands now use the actual command name as the user identifier instead of the generic "command" string.
| Before (6.x) | After (7.0) |
|---|---|
blame_id: "command" |
blame_id: "app:import-users" |
blame_user: "app:import-users" |
blame_user: "app:import-users" |
Existing audit entries with blame_id = "command" are not migrated automatically.
| Removed block | Reason |
|---|---|
navbar |
Replaced by built-in header |
breadcrumbs |
No longer used |
Available blocks in 7.0: title, stylesheets, dh_auditor_content, dh_auditor_header, dh_auditor_pager, javascripts.
The following classes can no longer be extended:
DH\AuditorBundle\Event\ConsoleEventSubscriber
DH\AuditorBundle\Event\ViewerEventSubscriber
DH\AuditorBundle\Twig\TimeAgoExtension
DH\AuditorBundle\Routing\RoutingLoader
DH\AuditorBundle\User\UserProvider
DH\AuditorBundle\User\ConsoleUserProvider
DH\AuditorBundle\Security\SecurityProvider
DH\AuditorBundle\Security\RoleChecker
DH\AuditorBundle\Viewer\ActivityGraphProvider
Use composition and Symfony's service decoration instead.
// Before (6.x)
$provider->getDays();
$provider->getLayout();
// After (7.0) — PHP 8.4 property hooks
$provider->days;
$provider->layout;
AnonymousToken handling has been removed (deprecated in Symfony 6.0, gone in Symfony 8.0).
This bundle requires auditor ≥ 4.0, which introduces its own breaking changes:
// Before
use DH\Auditor\Provider\Doctrine\Auditing\Annotation\Auditable;
use DH\Auditor\Provider\Doctrine\Auditing\Annotation\Ignore;
// After
use DH\Auditor\Provider\Doctrine\Auditing\Attribute\Auditable;
use DH\Auditor\Provider\Doctrine\Auditing\Attribute\Ignore;
// Before
$entry->getId(); $entry->getType();
$entry->getObjectId(); $entry->getUserId();
$entry->getUsername(); $entry->getCreatedAt();
// After
$entry->id; $entry->type;
$entry->objectId; $entry->userId;
$entry->username; $entry->createdAt;
utf8_convert is now opt-inThe implicit mb_convert_encoding() pass is disabled by default. Re-enable it if your data sources are not guaranteed to be UTF-8:
dh_auditor:
providers:
doctrine:
utf8_convert: true
See the auditor upgrade guide for the complete library changelog.
A complete step-by-step upgrade guide is available in docs/upgrade/v7.md.
For most applications, the migration boils down to:
# 1. Update dependencies
composer require \
damienharper/auditor:^4.0 \
damienharper/auditor-bundle:^7.0 \
symfony/framework-bundle:^8.0 \
doctrine/dbal:^4.0 \
doctrine/orm:^3.2 \
doctrine/doctrine-bundle:^3.0
# 2. Apply the schema migration (adds extra_data column)
bin/console audit:schema:update --force
# 3. Update namespace imports: Annotation → Attribute
# 4. Update route names in your templates and controllers
# 5. Run your test suite
The breaking changes are mechanical. No audit data is affected.
docs/ and are versioned alongside the codecomposer setup — replaces the four legacy setup5 / setup6 / setup7 / setup8 scriptsAbstractBundle, merge Configuration + DHAuditorExtension into bundle class by @DamienHarper in #592EventSubscriberInterface with #[AsEventListener] by @DamienHarper in #592#[AsController], #[AsTwigFilter], #[AutoconfigureTag], #[Autowire] attributes by @DamienHarper in #592final by @DamienHarper in #592AnonymousToken handling (removed in Symfony 8.0) by @DamienHarper in #592ActivityGraphProvider property hooks (days, layout) by @DamienHarper in #592NullFilter (blame_id IS NULL) by @DamienHarper in #591extra_data, IP, and firewall in audit entries by @DamienHarper in #596extra_data JSON column in viewer by @DamienHarper in #596extra_data_provider config option — built-in ExtraDataProvider service (route name) and support for any custom callable; complements the existing LifecycleEvent listener approach by @DamienHarper in #594NullFilter integration for anonymous user filtering by @DamienHarper in #591utf8_convert configuration option documented (opt-in, default false) by @DamienHarpertime_ago filter falling back to a hardcoded US-style Y/m/d g:i:sa format for dates older than one week and future dates — both fallback paths now use IntlDateFormatter and respect the application locale (#359)docs/) by @DamienHarper in #590Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/6.x...7.0.0
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/6.2.3...6.3.0
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/5.2.6...5.3.0
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/6.2.2...6.2.3
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/6.2.1...6.2.2
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/6.2.0...6.2.1
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/6.1.0...6.2.0
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/6.0.0...6.1.0
ViewerController final by @OskarStark in https://github.com/DamienHarper/auditor-bundle/pull/385actions/checkout@v4 in 5.x by @OskarStark in https://github.com/DamienHarper/auditor-bundle/pull/387Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/5.2.5...5.2.6
This release is focused on bringing Symfony 7, doctrine/orm 3.x and doctrine/dbal 4.x support as well as dropping PHP 8.0 and 8.1 compatibility.
|number_format on big numbers by @mvhirsch in https://github.com/DamienHarper/auditor-bundle/pull/363ext-json requirement by @DamienHarper in https://github.com/DamienHarper/auditor-bundle/pull/393ViewerController real final by @OskarStark in https://github.com/DamienHarper/auditor-bundle/pull/395actions/checkout@v4 in master by @OskarStark in https://github.com/DamienHarper/auditor-bundle/pull/386auditor-bundle 6 release by @DamienHarper in https://github.com/DamienHarper/auditor-bundle/pull/425Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/5.2.5...6.0.0
ViewerController by @OskarStark in https://github.com/DamienHarper/auditor-bundle/pull/379Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/5.2.4...5.2.5
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/5.2.3...5.2.4
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/5.2.2...5.2.3
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/5.2.1...5.2.2
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/5.2.0...5.2.1
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/5.1.1...5.2.0
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/5.1.0...5.1.1
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/5.0.3...5.1.0
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/5.0.2...5.0.3
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/5.0.1...5.0.2
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/5.0.0...5.0.1
This release is focused on bringing Symfony 6 as well as dropping Symfony 3.4, PHP 7.2 and 7.3 compatibility.
tools folder by @DamienHarper in https://github.com/DamienHarper/auditor-bundle/pull/287Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/4.2.0...5.0.0
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/4.1.0...4.2.0
symfony/doctrine-bridge by @DamienHarper in https://github.com/DamienHarper/auditor-bundle/pull/242Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/4.0.4...4.1.0
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/4.0.3...4.0.4
Full Changelog: https://github.com/DamienHarper/auditor-bundle/compare/4.0.2...4.0.3
How can I help you explore Laravel packages today?