Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Routing Auto Laravel Package

symfony-cmf/routing-auto

Symfony CMF RoutingAuto automatically creates and updates routes for your content objects. It hooks into persistence events and uses configurable route generators, keeping URLs in sync with your documents without any manual route management.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • symfony-cmf/routing-auto is not a standalone library; it is a thin orchestration layer over three Symfony-specific substrates: symfony-cmf/routing (the Route object model and ContentRepository abstraction), the Symfony EventDispatcher (it hooks Doctrine persistence events), and the Symfony DI/Config component for schema configuration.
  • Laravel's routing stack is architecturally distinct: Illuminate\Routing\Route is compiled into a route collection, uses controller/closure actions, route model binding, and a completely different URL-generation contract. There is no adapter surface where CMF routes can be registered as Laravel routes without writing a translation layer.
  • Laravel persistence is Eloquent-first; this package expects Doctrine ORM entity managers and lifecycle events. Doctrine-on-Laravel bridges exist but introduce a second ORM, a second identity map, and duplicated transaction semantics—an unacceptable complexity tax for a URL-generation concern.
  • Verdict: low architectural fit. The package assumes a Symfony CMF application shape; a Laravel application would have to adopt that entire shape (CMF routing, Doctrine, CMF content bundle) to justify it.

Integration feasibility

  • Composer constraints are the first hard gate. The package's last release (2020-10-28) targets the Symfony 3/4-era component line and PHP 7.x. Modern Laravel (10/11/12) requires PHP 8.1+ and Symfony 6/7 components for its own HTTP foundation—these are mutually incompatible without a fork.
  • symfony-cmf/routing itself is also effectively dormant; the transitive dependency chain has the same staleness, so pinning this package pins the whole CMF stack.
  • No Laravel service provider, no facade, no published config, no queue integration. Everything is container wiring a Laravel team would have to author from scratch, including event listener registration bridging Doctrine events into the Laravel container.
  • Verdict: integration is a build project, not an install. Estimate multi-week engineering for a bridge that would still be structurally fragile.

Technical risk

  • Abandonment risk: critical. Archived repository, 6 stars, 0 dependents, last release ~3.5 years ago. No upstream security patching, no PHP 8.2/8.3 support guarantees, no maintainer to escalate to. Any CVE in the dependency chain is our problem alone.
  • License risk: unresolved. NOASSERTION means the license could not be automatically determined. It is likely MIT given the CMF family, but legal must confirm before any code enters the tree—forking or vendoring an ambiguously licensed archived package is a procurement blocker.
  • Ecosystem risk: high. A package with zero dependents has effectively zero field validation. Edge cases in conflict resolution and slug generation are undocumented and untested against real-world content models.
  • Correctness risk: moderate-to-high. Route generation triggered by persistence events introduces coupling between write transactions and URL identity. Failure modes around partial writes, listener ordering, and cache invalidation are exactly the kind of thing an unmaintained package will not have hardened.
  • Opportunity signal: the 20.69 opportunity score reflects a real capability gap—automatic, content-aware route/slug lifecycle management is genuinely useful—but this package is not the vehicle.

Key questions

  1. What is the actual requirement—automatic slug generation, hierarchical/parent-aware URLs, locale-prefixed routes, or full route lifecycle management on content mutation? The answer determines whether a ~200-line Laravel-native implementation suffices.
  2. Is there any existing Symfony CMF footprint in the estate, or is this a greenfield Laravel decision? If greenfield, the CMF dependency is a non-starter.
  3. Has legal confirmed the license? Is there appetite to fork and own an archived package indefinitely?
  4. Are there maintained alternatives that solve the same problem natively—e.g. slug/route-generation packages for Eloquent, or a custom observer + Route:: registration model—that avoid the framework mismatch entirely?
  5. What is the cost of the bridge versus the cost of reimplementing the pattern? A TPM should force this comparison before any spike is approved.

Integration Approach

Stack fit

  • Poor as a direct dependency. The package is Symfony-CMF-shaped; the target is Laravel/Eloquent-shaped. The only coherent fit is conceptual reuse: borrow the route-schema and conflict-resolution model, not the code.
  • If the organization genuinely runs Doctrine on Laravel (some do, via doctrine/dbal or full ORM bridges), a narrower case exists—but even then, the CMF Route object and ContentRepository abstractions have no Laravel equivalent, so the bridge would need to project CMF routes into Laravel's route collection, which is a runtime translation layer with caching implications.

Migration path

  • From Symfony CMF to Laravel: no supported path. Route identity, content repository semantics, and event wiring all change. Treat as a rewrite.
  • From nothing to this package in Laravel: not recommended. The install is trivial; making it function is the project.
  • From nothing to a native implementation: recommended. Model routes as an Eloquent entity (routes table: id, routeable_type, routeable_id, locale, path, is_canonical), generate slugs on model saving/saved observers, resolve conflicts with a deterministic suffix strategy, and register a catch-all Laravel route that resolves path → model. This preserves the package's good ideas (schema-driven generation, conflict strategies, content-aware updates) without the framework tax.
  • If a fork is mandated for legacy reasons: vendor the package, pin PHP/Symfony constraints, add a compatibility shim, and treat it as internal code with an owner and a test suite—not as a third-party dependency.

Compatibility

  • PHP: last release predates PHP 8.1; expect deprecations and likely hard failures on 8.2+. Verify before any spike.
  • Symfony components: conflicts with Laravel's Symfony 6/7 transitive requirements are probable and will surface as Composer solver failures or runtime signature mismatches.
  • Doctrine: requires ORM entity managers and event subscribers; Laravel's default persistence does not provide these.
  • PSR: partial PSR-3/PSR-4 compliance likely, but no PSR-6/PSR-16 cache abstraction, so Laravel's cache layer cannot back it without a custom adapter.

Sequencing

  1. Requirements clarification (1–2 days): enumerate the URL behaviors actually needed. Kill scope that only exists to satisfy CMF.
  2. License and dependency audit (2–3 days, parallel with legal): confirm NOASSERTION, enumerate the transitive CMF/Doctrine tree, check PHP/Symfony constraint compatibility against the current Laravel baseline.
  3. Build-vs-bridge decision gate: a timeboxed spike (≤5 days) proving whether the package can even be installed and one route generated in a Laravel app. If the spike fails—likely—stop.
  4. Native implementation (if approved): schema, observers, conflict resolver, route resolver middleware, cache invalidation hooks, backfill command for existing content.
  5. Hardening: concurrency tests on slug collision, transaction-rollback tests on route creation, cache-staleness tests, locale coverage.
  • Do not sequence this behind other feature work; the decision gate is cheap and should be resolved early to avoid a late-stage dependency surprise.

Operational Impact

Maintenance

  • Adopting an archived package transfers 100% of maintenance to the team. There is no upstream to patch PHP 8.x compatibility, security issues, or dependency drift. Every Laravel or Symfony upgrade becomes a fork-maintenance task.
  • If forked: budget recurring engineering time per quarter for compatibility patches. If not forked: budget for an eventual forced migration under schedule pressure—the worst kind.
  • A native implementation has a smaller, owned surface area (~a few hundred lines plus tests) and materially lower long-term maintenance than owning a CMF fork.

Support

  • Zero maintainers, zero dependents, 6 stars. No issue tracker activity, no community answers, no Stack Overflow corpus. Internal engineers debugging a route-conflict edge case are on their own, reading source.
  • Onboarding cost is asymmetric: a Laravel developer can read a native observer-based implementation in an hour; understanding CMF's content repository, route providers, and Doctrine event ordering takes days and buys knowledge that does not transfer to anything else in the stack.
  • Supportability argues strongly for the native path; the package's abstractions are not reusable knowledge in a Laravel organization.

Scaling

  • Route generation on the write path is synchronous by design. At high content-write volumes, slug generation, conflict checks, and route persistence add latency inside the transaction; the package offers no async/queued mode.
  • Route table growth is linear with content × locales. Conflict resolution strategies that scan sibling routes can degrade without proper indexing—something an unmaintained package will not have tuned.
  • Read path: a catch-all resolver doing path→content lookups needs caching. The package's lack of PSR-6/16 integration means Laravel's cache cannot be plugged in without custom work; a native implementation can use the framework cache directly.
  • Multi-tenant and multi-locale scaling scenarios are poorly documented; assume they are unsupported until proven otherwise.

Failure modes

  • Orphaned routes: content deleted or soft-deleted outside the expected event path leaves dangling URLs pointing at nothing—404s or, worse, resurrected stale content.
  • Slug collision races: concurrent creates generating the same slug without a database-level uniqueness constraint and retry loop produce duplicates or 500s.
  • Listener ordering: route generation firing before slug fields are populated, or after a transaction that later rolls back, yields routes for content that never persisted.
  • Parent-path churn: moving a content node must cascade route updates to descendants; partial cascade failure leaves a mixed hierarchy that is painful to repair and has no reconciliation tooling.
  • Cache staleness: route changes not invalidating HTTP or application caches, so URLs update in the database but not in what users see.
  • Upgrade breakage: a routine Laravel/Symfony/PHP upgrade breaks the unmaintained package in a way that surfaces at runtime rather than install time.
  • Mitigation for all of the above requires tests and reconciliation commands the package does not ship—another argument for owning the implementation.

Ramp-up

  • For this package: high. Requires Symfony CMF concepts, Doctrine event lifecycle, DI configuration, and the package's own undocumented conflict-resolution semantics. Realistic estimate: 1–2 weeks before an engineer is productive, with ongoing bus-factor risk if only one person learns it.
  • For a native Laravel implementation: low. Eloquent observers, a routes table, a conflict resolver, and a catch-all route are idiomatic; a mid-level Laravel engineer is productive in 1–2 days.
  • Organizational recommendation: treat symfony-cmf/routing-auto as a design reference only. Do not add it as a dependency, do not fork it without a sponsor and a license clearance, and do not schedule work that assumes it can be made to function in Laravel. The capability it represents is worth building; the artifact is not worth adopting.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource