fpn/tag-bundle
FPN Tag Bundle brings flexible tagging to Symfony applications. Add tags to Doctrine entities, retrieve objects by tag, and render tag clouds through a simple, configurable API. It provides ready-to-use services and integration for building searchable, categorized content.
Architecture fit
fpn/tag-bundle is a Symfony bundle, not a Laravel package. Its unit of distribution is a Bundle subclass with a DI Extension and service YAML; its runtime value is delivered through Doctrine ORM mappings (a Tag entity, a Tagging join entity, a Taggable interface plus trait, a TagManager, and a TaggableListener event subscriber). Laravel has no bundle lifecycle, no compiler passes, and no auto-registered Doctrine mapping driver. The conceptual model — attach free-form labels to arbitrary entities through a polymorphic join table (taggable_type/taggable_id) — ports cleanly to Eloquent. The implementation does not. From a TPM standpoint: conceptually relevant, mechanically incompatible. Evaluate it as a specification artifact, not a candidate dependency.
Integration feasibility Adopting it in a Laravel app requires a source-extraction and rewrite effort, not an install:
laravel-doctrine/orm or equivalent) — an architectural decision most Laravel codebases have explicitly avoided.Steps 2–4 are the whole job. At that point the package is a reference implementation and the deliverable is bespoke code we own — which reframes the decision from "adopt vs. build" to "read vs. ignore."
Technical risk
symfony/* to 6/7. Composer will almost certainly refuse to resolve; forcing it via --ignore-platform-reqs or aliasing yields an untestable runtime. This is a loud risk — cheap to discover in a spike, expensive if discovered late.Key questions (these gate the whole evaluation; resolve before any commitment)
php, symfony/*, and doctrine/* constraints actually say, and does the code parse under PHP 8.2+?Stack fit Poor for a standard Laravel/Eloquent stack — it will not install or function. Acceptable only as a design reference for a Doctrine-backed Laravel service, or for a legacy Symfony application being maintained rather than migrated.
Migration path (ranked, with TPM recommendation)
spatie/laravel-tags or a hand-rolled morphToMany. Days of effort, maintained, Eloquent-native, covers the polymorphic join and tag queries. Recommended default.Tag/Tagging schema and TagManager semantics (loadTagging/saveTagging, name-vs-entity distinction) into Eloquent models, a trait, and a small service. One to two sprints including data migration. Gives ownership and a clean upgrade path.Compatibility
Verify before any commitment: declared php constraint, symfony/* and doctrine/* ranges, annotation-vs-attribute mapping, and whether the Taggable trait uses syntax valid on our minimum PHP. Treat any failure here as a stop sign, not a workaround prompt — this is a TPM enforcement point, because engineers under delivery pressure will reach for --ignore-platform-reqs.
Sequencing
Model/TaggableInterface → Entity/Taggable → Doctrine/TaggableListener → TagManager → TagRepository. Confirm the data model satisfies the requirement.(tag_name, resource_type, resource_id), index strategy, normalization rules.Maintenance Effectively zero upstream. Once adopted, the code is ours — every PHP minor, Laravel major, and Doctrine upgrade becomes our regression to catch. Budget a standing maintenance line item, or take option 1 and avoid the liability entirely. This is the cost that rarely appears in the initial estimate and always appears later.
Support No vendor, no active maintainer, no issue triage, no community safety net. Internal knowledge will concentrate in whoever performs the port — a single-point-of-failure risk worth naming explicitly in design review and in the on-call/ownership map.
Scaling Tagging is read-heavy and join-heavy. Watch for:
tag_name lookups for tag clouds and filtering — index tag_name and the composite resource key.COUNT/GROUP BY for tag counts — cache or denormalize a counts table past ~10⁵ taggings.Failure modes
Ramp-up Low for the domain — tagging is well understood and the API surface is small. Moderate-to-high for the integration: engineers must context-switch into Symfony bundle conventions and Doctrine mapping just to read the source. For a Laravel team that archaeology is the dominant cost and it buys nothing reusable.
Recommendation: treat fpn/tag-bundle as a specification, not a dependency. Approve a two-day timeboxed spike to extract the schema and TagManager semantics, then implement natively or adopt a maintained Eloquent package. Do not attempt to install a dormant Symfony 2.x bundle into a modern Laravel application. Log the zero-dependents finding in the vendor-risk register and close the evaluation.
How can I help you explore Laravel packages today?