manuxi/sulu-abbreviations-bundle
A Sulu CMS bundle for managing abbreviations and their definitions. Maintain a central glossary in the admin, then automatically annotate terms on the frontend with accessible tooltips or expansions for consistent terminology across your site.
Architecture fit
Despite being a PHP package, sulu/abbreviations-bundle is a Sulu CMS bundle built on Symfony, not a Laravel package. It depends on sulu/content-bundle ^0.8.3, Doctrine ORM with XML mappings, Symfony routing via #[Route] attributes, Symfony event subscribers, PHPCR (for routes/workspaces), and Twig. There is no service provider, no Eloquent, no Laravel HTTP kernel integration. Architecture fit against a Laravel application is therefore poor to non-existent unless the target system is a Sulu/Symfony application.
For a Sulu-based stack, the fit is strong: 2.0.0 aligns the bundle with Sulu's modern content architecture (draft/live dimension contents), which is the correct long-term direction and removes the legacy translation-entity model.
Integration feasibility
services.yaml, shipped structure template abbreviation_default, and functional tests with an in-memory SQLite + PHPCR kernel suggest a clean install path.abbr_abbreviations, abbr_abbreviation_dimension_contents, abbr_abbreviation_versions), an integer→UUID identity migration, and rewriting of page content, text-editor <sulu-link> references, bookmarks, and selection content types. Two dedicated migration commands exist (sulu:abbreviations:migrate-to-content, sulu:abbreviations:migrate-page-references), both idempotent and dry-run capable — a meaningful de-risking factor.abbr Twig filter logic, the data model) rather than functional.Technical risk
^0.8.3, which is itself pre-1.0 and may break. Version pinning is essential.Entity\Models, Entity\Interfaces, Mapper\AbbreviationDataMapper, Routing\AbbreviationsRouteDefaultsProvider, Preview\AbbreviationsObjectProvider, own task handlers, own website controller, and sulu_abbreviations.objects config are all gone. Any downstream code subclassing or referencing these must be rewritten.@SuluAbbreviations/abbreviation.html.twig) with content replacing abbreviation as the variable. Any theme overrides must be updated.abbreviation → abbreviations, propagating into stored link markup — silent breakage risk if migration is partially run.sulu/automation-bundle is now suggest; automation tab and scheduled publish silently disappear if absent. Cache invalidation degrades gracefully without sulu/http-cache-bundle, which is good, but means cache correctness depends on that bundle being present and configured.Key questions
sulu/automation-bundle required for our editorial workflow, and is it installed and supported?sulu/http-cache-bundle in use, and is the abbreviations reference alias resolvable by our cache manager?migrate-to-content or migrate-page-references produces bad data — is there a tested database restore, given the migrators are one-way and legacy tables are read-only?max_versions: 0)?Stack fit
Only viable on Sulu CMS with Symfony routing/DI and Doctrine ORM + PHPCR, plus Twig for front-end rendering. Confirm PHP and Symfony versions against the bundle and sulu/content-bundle ^0.8.3 constraints before committing. Treat this as not applicable to a Laravel codebase.
Migration path
docs/templates/doctrine-migration.php.dist as the template).sulu:abbreviations:migrate-to-content --dry-run, validate counts and spot-check draft/live content per locale, then run live. legacy_id on abbr_abbreviations is the reconciliation key.@SuluAbbreviations/abbreviation.html.twig and the content variable; update any custom link rendering to provider alias abbreviations.sulu:abbreviations:migrate-page-references --dry-run, validate rewritten selection properties (including inside blocks) and <sulu-link> markup, then run live.bin/console sulu:reference:refresh abbreviations.Compatibility
Re-verify every integration point that 2.0.0 changed: selection content types now return normalized live content arrays (not entities), sulu_resolve_abbreviation() and sulu_get_abbreviations() return arrays, the copy toolbar action is now copy_locale, and the settings route is /admin/api/abbreviations-settings. Any custom admin JS or API consumer coded against entity payloads will break.
Sequencing
Backup → schema → content migration → template/link updates → page-reference migration → reindex/refresh → cache purge → smoke test → authoring re-enabled. Do this in a staging environment with a production data copy first; the page-reference rewrite is the highest-regression step and should be validated by editorial QA on real pages, not fixtures.
Maintenance
Ongoing maintenance is moderate: the bundle tracks Sulu's content bundle, which is pre-1.0 and therefore a recurring upgrade cost. Budget for a version-pin review each Sulu upgrade. The 2.0.0 line is a large net simplification (deletes entities, mappers, controllers, task handlers), which should reduce long-term custom-code surface — but only after our own customizations are removed. Versioning adds a growing table (abbr_abbreviation_versions) requiring a retention policy; default is 20 per abbreviation per locale, 0 disables.
Support
Documentation is a clear strength for 2.0.0: English and German docs in docs/, UPGRADE.md, and rewritten READMEs covering publishing, translations, versions, references, teaser, HTTP cache, smart content, selection types, Twig, settings, and the 1.x→2.0 upgrade. Functional tests exist with an in-memory SQLite kernel and PHPCR, plus a test webspace. Support risk shifts from the vendor to us: any custom code we wrote against removed extension points is now unsupported and undocumented.
Scaling
Content-side scaling is fine — Doctrine-backed tables, standard Sulu patterns. Two watch items: (1) versioning table growth under frequent automated publishing; (2) cache invalidation fan-out — publishing an abbreviation purges every cached page containing it, plus tag/category pages and abbreviation list pages. A widely used abbreviation becomes a broad purge event. Mitigate with max_versions tuning and monitoring of cache-purge latency/volume around bulk publishes.
Failure modes
sulu/automation-bundle → scheduled publish silently unavailable; editors lose workflow with no error.sulu/http-cache-bundle → stale pages after publish, no failure signal.Ramp-up
Developer ramp-up is high for anyone without Sulu experience: Symfony DI, Doctrine XML mappings, PHPCR workspaces, and the content-bundle draft/live dimension model are all prerequisites. Estimate 1–2 weeks for a Symfony-fluent developer new to Sulu to be productive, plus dedicated time on the migration tooling. Editorial ramp-up is low — the admin UX improves (versions tab, insights/activity log, delete-translation dropdown, copy-to-locale) — but requires a short training session on draft/live publish semantics and translation deletion, since deleting the last locale now deletes the whole abbreviation into the trash.
How can I help you explore Laravel packages today?