⭐ Found this useful? Install from Packagist and give the repo a star on GitHub.
Symfony + Doctrine bundle for automatic auditing fields on any opt-in entity:
| Field | Set on |
|---|---|
createdAt / updatedAt |
prePersist + preUpdate (timestamps only on update) |
createdBy / updatedBy |
When an authenticated user is present (nullable in CLI) |
Complements nowo-tech/user-kit-bundle (account state / presence) and nowo-tech/auth-kit-bundle (auth flows). |
This bundle is FrankenPHP worker mode friendly, including the strict case where the kernel is not reset between requests. See docs/FRANKENPHP-WORKER-AUDIT.md.
- Optional traits:
TimestampableTrait,BlameableTrait,AuditableTrait - Public opaque UUID:
PublicUuidInterface+PublicUuidTrait, filled onprePersistbyPublicUuidListener(UUID v7) - Append-only
CreatedAtImmutableTrait(non-nullcreatedAt) SqlLikehelper: escapeLIKEinput with anESCAPE '\'clause that behaves the same on MySQL and SQLiteSqlFulltexthelper: DQL text search with MySQL / MariaDBFULLTEXT(MATCH … AGAINSTboolean prefix query, InnoDB token rules) and an escapedLIKEfallback elsewhere, plus result snippetsKeysetDeletehelper: delete matching rows in short primary-key batches (portable DBAL, keyset over the id)- Doctrine entity listener (
prePersist/preUpdate) - Action log (opt-in):
AbstractActionLogmapped superclass,ActionLogRecorder, filterable repository with keyset purge,nowo:audit-kit:action-log:purgeand an optional Twig timeline — maps onto existing tables with no migration - Named profiles — separate field mapping and flags per user entity (
User,Admin, …) with O(1) class resolution - Configurable property names and
user_class - Per-entity opt-out via
#[Auditable(enabled: false)] - Guest / CLI safe — blame fields stay
nullwithout errors
composer require nowo-tech/audit-kit-bundle# config/packages/nowo_audit_kit.yaml
nowo_audit_kit:
default_profile: default
profiles:
default:
user_class: App\Entity\UserThe legacy flat layout (user_class at root) remains supported. See Configuration.
use Nowo\AuditKitBundle\Model\AuditableTrait;
class Article
{
use AuditableTrait;
}- PHP 8.2+
- Symfony 7.4 | 8.x
- Doctrine ORM 2.15+ | 3.x
make -C demo/symfony8 up # http://localhost:8013 (default PORT)Each demo persists entities with automatic audit columns (see demo/symfony8/src/Entity/Article.php and LegacyRecord.php for audited vs opt-out). See demo/symfony8/README.md and docs/DEMO-FRANKENPHP.md for FrankenPHP setup (including worker mode for production).
make up
make test-coverage
make release-check- GitHub Actions CI requirements
- Installation
- Configuration
- PSR evaluation (REQ-CS-007)
- Usage
- Contributing
- Code of Conduct
- Changelog
- Upgrading
- Release
- Security
- Engram
- Spec-driven development
- GitHub Spec Kit
- Demo with FrankenPHP
- Product spec
- Code inventory
- Doctrine helpers spec
- Action log spec
- Keyset delete spec
- Full-text search spec
- Tests: PHPUnit (unit + integration)
- PHP: 100%
- TS/JS: N/A
- Python: N/A
Compatibility: PHP 8.2+ · Symfony 7.4 / 8.0 / 8.1 (CI matrix).
MIT — see LICENSE.
- Composer:
nowo-tech/audit-kit-bundle - Config root:
nowo_audit_kit
