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

Container Wrapper Bundle Laravel Package

liip/container-wrapper-bundle

Symfony bundle that provides a lightweight wrapper around the service container, letting you inject a container interface into services and fetch dependencies lazily without coupling code to Symfony's full container.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — Unchanged, and unaffected by this release. liip/container-wrapper-bundle remains a Symfony bundle, integrating through FrameworkBundle, the kernel, DI extension, and compiler-pass pipeline — extension points Laravel does not have. A version bump does not create a service provider, auto-discovery, facade, or config surface. The conceptual contribution (a typed wrapper exposing a narrow slice of the container rather than injecting the whole container) remains sound but non-additive: Laravel's contextual binding, interface-to-closure bindings, and constructor injection already cover it.

What the 1.1.0 release actually tells us — The release notes are the string see #6. That is a pointer, not a changelog. It communicates no breaking changes, no new features, no deprecations, no PHP or Symfony constraint changes, no security note. Crucially, the prior assessment rested on three load-bearing facts, and this release destabilizes one and leaves two untouched:

  • "Last release 2015-10-26" — now stale. A 1.1.0 tag implies a 1.0.x line and, at minimum, a repository that still accepts tags. The package is not frozen at a 2015 artifact.
  • "Archived / maintainer disclaimed" — status now uncertain, not refuted. A tag can be pushed to an archived repo, or the archive may have been lifted. We cannot distinguish "maintenance resumed" from "drive-by tag on a dormant project" from the notes alone.
  • "No PHP 8 / Symfony 6+ / Laravel compatibility work" — unverified, and the thing that matters. This is the single fact that determines whether the rejection still holds. The release notes do not assert it, and the supplied metadata is an empty array, so we have no composer.json diff, no publish date, no constraint changes.

The verdict does not flip on a version number. It flips only on a compatibility commit, and nothing in the release notes claims one.

Integration feasibility — Still not feasible as a dependency, on current evidence. The blocking condition was never "the package is old"; it was "the runtime assumptions require the Symfony framework layer." A 1.1.0 release that does not explicitly raise the PHP platform constraint and the Symfony major still resolves to the same wall. The reimplementation path is unchanged: ~50–100 lines of Laravel-native accessor interfaces plus contextual bindings, roughly 1–2 engineer-days, fully owned.

Technical risk — Revised, not retired:

  • Maintenance risk: downgraded from "certain" to "unknown." A post-2015 release is a positive signal but an uninformative one. Two words of release notes is not evidence of a maintained project; it is evidence of a commit. Cadence, issue triage, and security response remain unmeasurable from a single tag.
  • Compatibility risk: unchanged and still the gating item. Assume PHP ~5.x and Symfony ~2.x until a composer.json proves otherwise.
  • Ecosystem risk: unchanged. Dependents and adoption signal do not move on a 1.1.0 tag.
  • Supply chain risk: unchanged in kind. Abandoned-and-unpatchable and lightly-maintained-and-unpatchable carry the same remediation exposure for a purely stylistic benefit.
  • New, mild process risk. A release with no changelog is itself a signal about release hygiene: we would be unable to assess upgrade impact on future bumps any better than we can on this one.

Key questions — (1) What does #6 contain — specifically, does it touch composer.json platform constraints, Symfony major version, or PHP 8 support? (2) What is the 1.1.0 publish date, and is the repository still archived? (3) Why was the release scored on a two-word notes string with an empty metadata payload — was composer.json not fetched? (4) Original drivers stand: is someone remediating container-injection antipatterns in an existing codebase? (5) Who proposed this, and against what criteria was it scored 0.1375? (6) Can a coding standard plus a PHPStan architecture rule satisfy the goal without any dependency?

Verdict: reject at intake, unchanged. The 1.1.0 release weakens the "abandoned since 2015" argument but does not touch the architectural argument, and provides no evidence on the compatibility question that actually gates adoption. Re-open only if #6 turns out to contain a PHP 8 / modern-Symfony compatibility commit — and even then, the answer for a Laravel codebase remains "port the pattern, don't import the bundle."

Integration Approach

Stack fit — None, unchanged. Laravel and Symfony intersect at the component level (HttpFoundation, Console, Finder), which Laravel consumes as libraries. This bundle requires the framework layer. A 1.1.0 bump does not alter which layer the package binds against.

Migration path — Unchanged, and still the correct path:

  1. Define narrow accessor interfaces per bounded context (BillingServices, ReportingServices) declaring only the collaborators that context needs.
  2. Bind each interface in a service provider to a small wrapper with typed getters — or prefer contextual resolution per method.
  3. Add a PHPStan custom rule or Psalm plugin that fails CI when Container or Application appears in a constructor signature outside the composition root.
  4. Document it in the engineering handbook as a coding standard.

Step 3 is what changes behavior; the wrapper alone is advisory.

Compatibility — Assume incompatible until a composer.json at 1.1.0 says otherwise. If the release did relax constraints, verify it directly rather than through release notes; if it did not, the package still will not install on Laravel 10/11 / PHP 8.2+ without --ignore-platform-reqs, which converts a clean resolution failure into a runtime failure — strictly worse.

Sequencing — Do not sequence around this package. Two cheap, timeboxed actions, in parallel, both under half a day:

  • Evidence retrieval (2 hours). Pull the 1.1.0 composer.json, the #6 diff, and the tag date. This is the only thing that can change the verdict, and it is a git show.
  • Validation spike (2 hours). composer require in a throwaway Laravel skeleton against 1.1.0; capture the resolution outcome either way.

If both come back negative on compatibility — the expected result — close the intake and proceed with the native reimplementation. Any plan that puts this bundle on the critical path is still a plan with an unbounded tail.

Operational Impact

Maintenance — Revised but still poor. The "permanent fork obligation on day one" framing no longer strictly applies: a 1.1.0 tag suggests someone is at the keyboard. But a single unlabeled release after a multi-year gap does not establish a cadence, and the fork obligation is merely deferred, not removed — we would still absorb every future PHP minor and Laravel upgrade against code whose release notes are a cross-reference. The cost remains disproportionate to the package's size, because it is driven by the thinness of the maintainer signal, not the line count.

Support — Marginally improved, not solved. A release implies a reachable issue tracker; #6 implies at least one active thread. That is not a support channel: no stated SLA, no security contact, no documented triage process, no updated README. On-call runbooks would still be written from scratch by whoever reverse-engineers the code.

Scaling — Unchanged. Organizationally this remains a bespoke, undocumented idiom absent from every tutorial, Stack Overflow answer, and Laravel corpus. Team growth multiplies the knowledge-transfer tax while the native answer (contextual binding) is already familiar to every Laravel developer we hire.

Failure modes —

  • Container-as-service-locator inversion. A generic wrapper exposing arbitrary service IDs recreates the antipattern one indirection deeper; dependencies vanish from signatures and from static analysis.
  • Hidden dependency graphs. Runtime resolution instead of injection-time resolution moves failures from boot to request handling.
  • Circular resolution. Lazily resolved typed accessors can produce cycles that constructor injection catches immediately.
  • Test friction. Mocks target the wrapper rather than the real collaborator, weakening unit-test fidelity.
  • Platform failure. Realistic order of failure is Composer resolution, then autoload/class errors, then Symfony kernel assumptions — three surfaces, zero delivered value. A 1.1.0 tag with unstated constraints does not remove any of them.
  • Silent-upgrade failure (new). With no changelog discipline, a future 1.1.x patch could alter resolution behavior with no discoverable record — we would be debugging blind on a package we cannot afford to own.

Ramp-up — Low technical surface area, high cognitive tax, unchanged. An engineer reads the wrapper in fifteen minutes, then has no external reference to confirm idiomatic usage and no upstream to consult when behavior looks wrong. The 1.1.0 release does not add documentation; it adds a version number. That cost is paid repeatedly, forever, against a benefit a linting rule delivers for free.

Bottom line for the roadmap: the 1.1.0 release changes the package's maintenance narrative but not its architecture or its compatibility posture. It is still a Symfony bundle with no service provider, no facade, and no documented PHP 8 / modern-Symfony commitment — now with one unattributed release rather than a clean decade of silence. Re-score the maintenance axis upward if #6 proves to be genuine compatibility work; leave the architectural rejection in place either way. Budget the 1–2 days for the native accessor-plus-static-analysis approach, which delivers the intended benefit, is fully owned, and carries no supply-chain exposure.

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.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager