modera/routing-bundle
Modera Routing Bundle adds flexible route management to PHP applications, with support for localized and dynamic routes, route caching, and easy integration into existing frameworks. It simplifies defining, matching, and generating URLs while keeping configuration clean and maintainable.
Architecture fit. The framing mismatch must be resolved before any other decision: modera/routing-bundle is a Symfony bundle, not a Laravel package. It hooks into Symfony's bundle/DI lifecycle — a Bundle subclass, a container compiler pass, and Symfony routing resource loaders — to let other bundles self-register routing resources so the host app doesn't hand-edit app/config/routing.yml. Laravel has no bundle abstraction and no central routing manifest; routes come from service providers via loadRoutesFrom() / Route::group(). The problem the bundle solves does not exist in Laravel, and the mechanism it uses has no counterpart. Even in its native ecosystem it is architecturally superseded by AbstractBundle::configureRoutes(RoutingConfigurator) (Symfony 5.3+) and PrependExtensionInterface. Fit is: N/A for Laravel, obsolete-but-illustrative for Symfony.
Integration feasibility. Near zero as a drop-in on any modern stack. There is no port path short of rewrite — the value is ~20–40 lines of "prepend/scan a routing resource" logic, which is a one-day native implementation in a Laravel service provider or a Symfony extension. Composer resolution is likely a hard blocker: a 2016 bundle will pin Symfony 2.x/3.x and PHP 5.x constraints and won't install against PHP 8.x + Symfony 5/6/7 or Laravel 9/10/11 without --ignore-platform-reqs hacks that push risk into runtime. The 9.65 opportunity score reflects a real unmet need (dynamic, package-owned route registration), not a viable artifact — it should be read as a roadmap signal, not a dependency signal.
Technical risk. High and unmitigated:
[READ-ONLY] frozen repo, last release 2016-06-10, ~nine Symfony majors stale.ContainerBuilder APIs it leans on have been deprecated and removed.Key questions.
Stack fit. PHP yes; framework: no for Laravel, marginal-but-obsolete for Symfony ≥5.3, and candidate-as-vendored-fork only for a legacy Symfony 2.x/3.x app under maintenance. If the estate is Laravel, mark this not applicable and implement the pattern natively — that is the leverage path.
Migration path.
$this->loadRoutesFrom(__DIR__.'/routes/web.php') (separate calls for API/console), wrap in Route::middleware()/prefix() groups driven by publishable config, and apply route-name prefixes to prevent collisions. Delivers the bundle's stated capability with zero third-party surface.AbstractBundle::configureRoutes(RoutingConfigurator $routes); the framework imports automatically.PrependExtensionInterface and prepend a framework.router.resource entry pointing at the bundle's routing file — exactly the bundle's behavior in ~30 lines we control.src/ThirdParty/, pin an exact commit, and isolate behind a thin adapter so it can be swapped later.Compatibility. Assume incompatibility until proven otherwise. Verify PHP constraint, Symfony major, and deprecated-API usage before any spike. If vendoring, lock constraints explicitly and never resolve it transitively into unrelated work.
Sequencing.
route:cache / cache:clear / router:cache equivalent).Maintenance. Upstream maintenance is effectively zero — archived repo, nine-year-stale release. Adoption transfers 100% of maintenance to us: PHP/Symfony upgrades, security patches, bug fixes, and framework-API churn. That ongoing cost vastly exceeds writing the functionality ourselves. Recommendation: reject; replace natively.
Support. No vendor, no community, no tracker activity, no Stack Overflow corpus. Zero stars / zero dependents means nobody to escalate to and no prior art for failure diagnosis — the team becomes the sole authority on a codebase nobody wrote.
Scaling. Routing is compile-time and cached, so runtime throughput is a non-issue. The scaling risk is organizational and topological: as more packages register routes dynamically, name collisions, path shadowing, and nondeterministic ordering grow more likely, and an unmaintained package offers no guardrails to detect them.
Failure modes.
Ramp-up. Near-zero for a Symfony-fluent engineer (standard DI/bundle idioms). Effectively blocked for a Laravel-only team: the conceptual model (packages own their routes) transfers cleanly, but none of the code does, and time spent learning a dead Symfony bundle's internals is pure waste. The native replacement is learnable in an afternoon by anyone who can write a service provider.
TPM bottom line. The opportunity signal is legitimate — package-owned, host-config-free route registration is a real ergonomics problem worth designing away in our plugin strategy. But it is already solved natively in both target frameworks, and this artifact is an archived, Symfony-only implementation with no users and no maintainer. Score it reject / replace natively; use it as a design reference for our own plugin onboarding model, never as an onboarded dependency — and if it is proposed for a Laravel service, stop the proposal: it is not installable there.
How can I help you explore Laravel packages today?