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

Framework Extra Bundle Laravel Package

jungi/framework-extra-bundle

A Symfony bundle that adds extra annotations and conveniences beyond SensioFrameworkExtraBundle, helping streamline controller configuration and common framework tasks with less boilerplate.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — primary blocker, unchanged by v2.1.0. Despite the brief framing this as a Laravel/PHP package, jungi/framework-extra-bundle is a Symfony bundle, not a Laravel package. It registers a Bundle class, ships Symfony DI extension/compiler passes, and hooks kernel.request / kernel.response event listeners. Laravel has no equivalent bundle contract: its HTTP kernel, middleware pipeline, routing layer (Illuminate.Routing), and container bindings are structurally different. There is no config/bundles.php, no BundleInterface, and no HttpKernel event dispatcher with the same semantics. Dropping this into a Laravel app is not a composer require — it would require a compatibility shim that reimplements the bundle's registration surface.

What v2.1.0 changes. One line of substance: all value argument resolvers now implement Symfony's ValueResolverInterface (introduced in Symfony 6.2) rather than the older ArgumentValueResolverInterface. That is a Symfony-internal contract migration, non-breaking for consumers, and semantically neutral for anyone outside the Symfony HttpKernel argument-resolution pipeline. Two things follow from it:

  • It confirms and deepens the Symfony coupling. The release is entirely about conforming to a Symfony 6.2 kernel contract. It provides zero signal that Laravel compatibility is on the roadmap — the opposite, if anything.
  • It moves the known-good floor to Symfony 6.2, which is useful context for the version-ceiling question but does not extend the ceiling to 7.x or add PHP 8.3/8.4 coverage.

What it actually provides. Attribute-driven request/response mapping (route-level metadata for view/format, parameter resolution), content negotiation (Accept-header parsing, format/quality-value selection, FormatNegotiator-style behavior), and related controller conventions. In a Laravel context, roughly 60–70% of this is already native: $request->prefers(), AcceptHeader parsing, Route:: attribute-free definitions, response macros, and form requests. The residual value is the declarative attribute style, which Laravel supports only partially (#[Route]-style attributes exist via third-party packages, not the framework). Note that the argument-resolver change is in the part of the bundle that maps least cleanly onto Laravel's container/route-parameter injection, so the release reduces the transferable portion rather than increasing it.

Integration feasibility: low as-is, moderate as a pattern. Realistic paths are (a) do not adopt, extract the attribute-metadata design and reimplement in ~200–400 LOC of Laravel middleware plus a controller-attribute resolver; or (b) if the org is genuinely on Symfony, pin to v2.1.0 and vendor. Path (a) remains the only one that survives scrutiny for a Laravel codebase.

Technical risk: high, with one factual correction to the prior assessment.

  • Maintenance: sporadic, not zero. The prior "archived / no maintenance" characterization is now too strong. v2.1.0 is a real compatibility commit, which means someone is watching Symfony minor releases. But it is a single narrow change after a long gap, with no published cadence, no release policy, and no issue-tracker activity signal. Treat upstream as best-effort and unpredictable, not dead. The planning consequence is nearly identical — you still cannot depend on a fix landing on your timeline — but "no upstream exists" overstates it and should not be used as the argument.
  • Version ceiling remains the real constraint. A 6.2-era compatibility commit does not imply Symfony 6.4/7.x or PHP 8.3/8.4 readiness, and static-analysis toolchains (PHPStan/Psalm) are still unvalidated against it.
  • 20 stars, 0 dependents — still essentially no production validation. Zero dependents means no ecosystem signal that the edge cases (q-value ordering, wildcard */* fallback, 406 handling) behave correctly outside the author's use.
  • MIT license — the one clean dimension; forking and vendoring is legally unencumbered.
  • Semver hygiene unverified. A 2.0 → 2.1 minor bump for a change that swaps an implemented interface is defensible, but with one maintainer and no dependents there is no external pressure enforcing it. Verify the diff before pinning anything.

Key questions for the requester.

  1. Is the target codebase Laravel or Symfony? The brief and the package disagree, and this determines everything downstream. v2.1.0 makes the Symfony framing more explicit, not less.
  2. Which specific behaviors are wanted — attribute-based routing metadata, content negotiation, or both? Which are not already covered by native framework features?
  3. What PHP and framework version constraints apply? Confirm whether Symfony 6.2 is your floor or your ceiling — v2.1.0 only evidences support at 6.2, not above it.
  4. Is the intent to depend on this, fork it under an internal namespace, or mine it for design?
  5. Given upstream ships narrow compatibility commits on an irregular cadence, is there a named internal maintainer willing to own a fork and carry PHP/framework bumps between upstream releases?

Integration Approach

Stack fit: negative for Laravel. Do not add this to a Laravel composer.json. The dependency graph pulls Symfony HTTP Foundation and HttpKernel components that Laravel already shadows with its own implementations; Composer will either conflict or install a parallel, unused copy. v2.1.0 tightens the coupling to Symfony's 6.2 argument-resolver contract, so the argument for Laravel is now weaker than when the assessment was written: even the code you might mine for design is increasingly expressed in Symfony-specific terms.

If the stack is Symfony, the fit is reasonable but the version ceiling is still the constraint. Pin 2.1.0 specifically — it is the only release evidenced against a modern Symfony minor — verify it resolves against your exact Symfony version, and fork into an internal namespace (acme/framework-extra-bundle) so you control release cadence. Best-effort upstream maintenance is not a substitute for an owner, and a fork also gives you a stable base to carry the eventual 6.4/7.x work yourself.

Recommended migration path (Laravel): reimplement, don't integrate.

  1. Inventory the two or three attributes actually motivating the request (e.g. #[ResponseFormat], #[ContentNegotiation] equivalents). Discard the rest.
  2. Map each to native primitives: content negotiation → Request::prefers() + a small middleware; request/response attribute metadata → a controller-attribute reader invoked from a route middleware or a base controller trait; format resolution → a ResponseFactory macro.
  3. Build as an internal package under packages/ with its own test suite covering the negotiation edge cases (q-values, Accept: */*, missing header, 406).
  4. Validate against real endpoints in staging, not just unit tests.

Compatibility work if forking: bump the symfony/* constraints beyond 6.2, run the existing test suite against your PHP version, and add static analysis. The v2.1.0 diff is small enough to review line-by-line before vendoring — do that rather than trusting the tag.

Sequencing.

  • Week 1: confirm framework target; spike the native-primitive mapping; timebox a resolution check against your Symfony/PHP constraints to establish whether the ceiling is real.
  • Week 2: build the internal equivalent (or vendor the v2.1.0 fork) behind a feature flag.
  • Week 3: shadow-run on one or two endpoints, diff behavior.
  • Week 4: cut over, delete the dependency, document.

Do not sequence this as "install, then adapt." A recent compatibility commit is not the same as maintained-and-supported; every subsequent step is still a rescue operation rather than an integration.

Operational Impact

Maintenance: internal ownership from day one, with sparse rather than absent upstream. v2.1.0 revises the earlier "no upstream" framing — there is a maintainer making narrow compatibility commits. What there is not: a cadence you can plan against, an SLA, a support channel, or any evidence of testing beyond the author's use. If adopted, someone on the team owns the code — including security review, PHP version bumps, and framework upgrade compatibility — and picks up the gap between upstream's occasional commits. For a package delivering attributes and content negotiation, that is still a poor use of engineering time relative to a ~400-LOC internal reimplementation.

Support: effectively nonexistent. 20 stars and no dependents means no Stack Overflow corpus, no issue-tracker history to search, no community to sanity-check behavior against. Ramp-up cost falls entirely on reading the source. Any bug is yours.

Scaling: runtime cost is negligible; cognitive cost is not. Attribute metadata is resolved at container compile time and cached, and the v2.1.0 resolver change is a compile-time contract swap with no per-request cost, so this is not a throughput concern. The scaling risk is organizational: a dependency the team cannot reason about, sitting in the request/response path, becomes a debugging hazard during incidents. Content negotiation bugs (wrong format served, silent fallback to HTML on an API route) surface as client-facing 4xx/5xx surges rather than clean exceptions.

Failure modes to plan for.

  • Silent negotiation drift — an Accept header the negotiator doesn't recognize falls back to a default format instead of returning 406, producing malformed responses downstream.
  • Composer conflict on framework upgrade — the constraint set blocks a Symfony/PHP bump, forcing an emergency fork mid-upgrade. Partially mitigated for Symfony 6.2 by v2.1.0; untouched for 6.4/7.x.
  • Upstream-goes-quiet again — v2.1.0 proves liveness, not continuity. Plan for the next compatibility gap to be yours to close.
  • Abandoned-adjacent audit flag — supply-chain scanners will flag low-maturity/low-adoption dependencies; expect a security review ticket per quarter regardless of the new release.
  • Bus-factor one — both upstream and internal. The sole engineer who read the source leaves; nobody can debug the attribute layer.

Ramp-up: high relative to value. Symfony-specific knowledge (event listeners, compiler passes, FormatNegotiator, value resolvers) does not transfer to a Laravel team — and v2.1.0 adds another Symfony-6.2-specific concept to learn. Budget 2–3 days for one engineer to reach working familiarity — comparable to the time needed to write the internal replacement.

Recommendation. Unchanged for a Laravel codebase: reject the dependency, adopt the pattern. Extract the attribute-based request/response design and content-negotiation semantics, reimplement against native Laravel primitives, and ship as an internal package with tests. v2.1.0 is a genuine but narrow Symfony 6.2 compatibility commit — it softens the "abandoned" wording and should be reflected in the vendor risk record, but it does not move architecture fit, does not add a Laravel story, and does not extend the version ceiling. For a Symfony target, pin v2.1.0 and fork immediately. For Laravel, this remains a design reference, not a dependency.

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.
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package