runroom-packages/redirection-bundle
Redirection bundle for Symfony applications that helps manage URL redirects from a central place, so moved or renamed pages keep resolving cleanly. Useful for handling legacy paths and reducing broken links without scattering redirect rules across config.
Architecture fit. Despite being catalogued here as a "Laravel/PHP package," runroom-packages/redirection-bundle is a Symfony bundle, not a Laravel package. It provides CRUD management of redirection records inside the Sonata Admin interface — i.e., it is a thin administrative UI + persistence layer for redirect entities, not a request-interception layer in itself. Fit is therefore conditional on two things being true at once: (1) the host application is Symfony, and (2) the org has already adopted Sonata Admin (a heavyweight, opinionated admin ecosystem). If either is false, the effective integration cost is dominated by adopting Sonata, not by the redirect feature. On a Laravel stack — the framing implied by the request — fit is zero without a full framework migration.
Integration feasibility. Mechanically low-friction on a compatible Symfony+Sonata host: standard Composer install, bundle registration in config/bundles.php, Doctrine entity + schema migration, route/admin class wiring. The functional surface is small (redirect source → target, likely status code, likely enable/disable), so the code to review is bounded. The real feasibility question is not "can we install it" but "can we trust and own it."
Technical risk. High relative to the value delivered. Signals: 1 GitHub star, 0 dependents, and a [READ-ONLY] mirror prefix indicating canonical development and issue tracking live elsewhere (Runroom's internal GitLab). That means no public issue tracker, no visible PR/contribution flow, and no community to absorb maintenance. Bus factor is effectively the single vendor. Sonata Admin major-version coupling is a known churn source. The package also plausibly encodes redirect resolution assumptions (exact match vs. regex/wildcard, loop handling, 301/302/410 semantics, hit counting) that must be verified in code, not documentation. A score of 0.005 with opportunity 24.41 reads as "low strategic value, low adoption" — consistent with a competent internal utility that was open-sourced incidentally.
Key questions.
kernel.request listener, or only the admin CRUD? Who performs the actual redirect?dev-main only?) and last-commit recency.Stack fit. Green light only for Symfony 5/6/7 + Sonata Admin + Doctrine ORM shops. Yellow for Symfony shops without Sonata — evaluate pulling in Sonata solely for this, which is almost never justified; a simple custom admin form is cheaper. Red / non-starter for Laravel or any non-Symfony host. For Laravel the pragmatic equivalents are spatie/laravel-redirects or a small custom middleware + Redirect model; re-implementing this bundle's ~few hundred lines of CRUD is likely less total effort than a framework migration.
Migration path. Two realistic sources of existing redirects: web-server config (nginx rewrite/return, Apache .htaccess) and a prior plugin/CMS table. Plan a one-time export→import into the bundle's entity, with a reconciliation pass for regex-vs-literal and case-sensitivity differences between server config and application-level matching. Treat the old config as read-only during parallel-run, then decommission.
Compatibility. Verify the package's composer.json constraints against the pinned Symfony, Sonata Admin, Doctrine, and PHP versions in the target. Sonata Admin majors are not casually co-installable; a mismatch here is the single most likely blocker. Confirm the entity mapping strategy (attributes vs. annotations) matches the target's Doctrine config, and that any bundled migrations are safe to replay.
Sequencing.
Maintenance. Assume internal ownership post-adoption. The upstream is a read-only mirror with no public issue channel and negligible community; you cannot rely on upstream turnaround for security patches or Sonata compatibility fixes. Fork-and-patch is the default operating model, which means a code owner, a CI job tracking upstream, and a documented upgrade cadence tied to Sonata majors. Cost is modest because the code surface is small — but it is not zero.
Support. No SLA, no vendor contract, no community forum. Support is whatever the internal owning team provides. Acceptable for a low-blast-radius feature; unacceptable if redirect correctness is business-critical (e.g., SEO-preserving legacy URL migrations, campaign tracking) without a named owner and runbook.
Scaling. Two dimensions. Data: the redirect table grows monotonically and is read on (potentially) every request — needs a unique/indexed lookup on the source path and a purge policy for stale entries; unbounded growth degrades lookup. Traffic: if the bundle's listener runs per-request and hits the DB, that's a per-request query on the hot path — require a cache layer (in-memory/Redis) with explicit invalidation on admin save. If hit-counting is included, its writes are a write-amplification risk under traffic and should be async or sampled.
Failure modes.
Ramp-up. Low technical ramp-up: the domain (HTTP redirects, status codes) is universally understood, the code is small, and Sonata Admin familiarity is the only specialized skill — a Symfony developer picks it up in hours. The real ramp-up cost is organizational: establishing the fork, ownership, upgrade process, and the redirect governance policy (who may add rules, review for loop/shadowing risk). Budget days, not weeks, for engineering; budget ongoing ownership regardless of how small the code is.
How can I help you explore Laravel packages today?