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

Use Case Bundle Laravel Package

openclassrooms/use-case-bundle

A Symfony bundle for organizing application logic into explicit use cases. It provides base classes, interfaces, and service wiring to define and execute use cases cleanly, keeping controllers thin and business rules isolated and testable.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Unchanged. The package is a Symfony bundle, not a Laravel package. Its job is framework glue: registering a DI extension, exposing a configuration tree, and tagging/autowiring handlers into a message bus via compiler passes. Laravel has no bundle concept and no registerBundles() lifecycle, so none of that glue executes under Laravel's kernel. The reusable substance lives one layer down, in the underlying openclassrooms/use-case abstractions (command/query objects, handlers, a bus contract) — those are plain PHP and portable. Net: the pattern fits our stack well; the artifact does not. v5.0.0 does nothing to change this, because it changes no glue — it is a platform-compatibility bump.

Integration feasibility. Two viable paths. (1) Adopt the core use-case library and write a ~150-line Laravel service provider that binds the bus, resolves handlers from the container, and registers a make:-style generator command. (2) Install the bundle and bridge it through a Symfony-container adapter — not recommended; it adds a second container, a second config system, and a debugging surface with no payoff at this scale. Path 1 remains the recommendation and is unaffected by the release, except that the version of the core library we depend on must be checked for the same PHP floor v5.0.0 introduces.

Technical risk.

  • New in v5.0.0 — PHP floor raise. The entire content of this major release is "Bump for php8.5." A major version number for a platform bump means the floor moved and older PHP is dropped. Confirm the exact php constraint in composer.json rather than trusting the release note; that constraint propagates to us through the core library and, if we bridge, through the bundle's Symfony ranges.
  • Semver is not a safety net here. Using a major version to ship a compatibility bump — with no changelog, no migration note, and no deprecation path — tells us the project versions loosely. Treat any version range as untested territory and pin exact versions with a lockfile-verified tarball.
  • Supply chain (updated, marginally better). Still 0 stars, 0 dependents, single-organization ownership, no third-party production evidence. But this release is the first observed evidence of reactive maintenance: a maintainer moved on a PHP release rather than letting the package rot. That is a real, if small, positive signal about the bus factor. It does not create a community backstop.
  • Metadata anomaly — largely resolved. The prior assessment flagged a future-dated release. A subsequent normal release on the same timeline is consistent with that date having been legitimate rather than a registry error. Verify against Packagist, then downgrade this from "integrity concern" to "closed."
  • Maintenance is now branch-split. v5.x is presumably 8.5-only; 4.x is the branch for everything older. If any of our services sit below the new floor, we are on an unmaintained branch by definition. That matters more than the bump itself.
  • Bus factor. Unchanged: maintenance tracks one team's internal needs. MIT licensing means a fork is always available, which materially de-risks abandonment.
  • Code surface is small, which cuts both ways — low blast radius, but also low defensive maturity (fewer edge cases handled, thinner test matrix). A version bump that touches only composer.json adds no test surface.

Key questions. (1–4 unchanged; 5 and 6 are new.)

  1. Do we actually want the CQRS/use-case pattern in this codebase, or only the handler-resolution plumbing? If the former, the bundle is irrelevant.
  2. Is openclassrooms/use-case (the parent library) actively released, and what is its dependency and PHP-version posture — does it also require 8.5?
  3. What exactly does the bundle wire — handler discovery convention, middleware, transaction wrapping? Anything we'd have to reimplement in Laravel?
  4. Are there Symfony-version constraints that would force a bridge upgrade cadence?
  5. Has any team here already standardized on a Laravel bus (Laravel's own command bus, laravel-mediator, or similar)? Duplication risk is real.
  6. New: What is our actual PHP version distribution across services, and what is the exact floor in v5.0.0's composer.json? If the floor exceeds our fleet's floor, this package is not adoptable at all until we upgrade — which reorders the whole decision.

Integration Approach

Stack fit. Unchanged: poor at the artifact level, good at the concept level. Treat this package as a reference implementation of a dispatch pattern, not as a dependency. The bundle's compiler-pass logic is worth reading before we write our own provider — it encodes the author's decisions about handler registration and naming conventions, which is the genuinely non-obvious part. Note when reading it that v5.0.0's diff is composer.json only, so the convention logic you extract is identical to 4.x; read whichever branch matches our PHP floor.

Migration path. Sequence unchanged, with one gate added up front. 0. Gate: read v5.0.0's composer.json and compare its php and Symfony constraints against our fleet's lowest supported runtime. If it exceeds it, stop — do not proceed past the spike, because the core library's floor likely moves in lockstep.

  1. Read the bundle's DI extension and compiler pass; extract the registration contract (how handlers are keyed to commands).
  2. Depend on the framework-agnostic core package, or vendor the interfaces directly if the parent library's scope exceeds what we need.
  3. Implement a Laravel service provider: tag handlers, bind the bus as a singleton, add contextual binding for the command-to-handler map.
  4. Publish it as an internal package so multiple services share one implementation and one upgrade path.
  5. Only if the internal package proves unnecessary do we reconsider the upstream bundle under a Symfony service — which is the scenario where it's genuinely a drop-in.

Compatibility. This is the section the release actually changes. Verify the PHP floor explicitly; a "bump for 8.5" major can mean either "requires 8.5" or "supports up to 8.5" and the release note does not say which. Also re-check whether the bundle still depends only on Symfony components we already pull transitively (console, dependency-injection, config) — if the bump widened those ranges, partial reuse of the console command for scaffolding may still be possible without the full bundle lifecycle.

Sequencing. Do this as a timeboxed spike (1–2 days) inside an existing service, not as a platform initiative. Add the PHP-floor check as a 30-minute prerequisite before the spike, not a task inside it — a failed gate should cost us half an hour, not a day. The decision point remains early: if the convention-extraction step takes more than a day, the pattern is not worth the ceremony and we should stay with Laravel's native command bus. Deliverables in order: PHP-floor gate → convention write-up → provider PoC → one migrated handler → team review. Do not sequence this ahead of anything that touches the framework upgrade path; if anything, this release makes the PHP upgrade path a predecessor rather than a parallel track.

Operational Impact

Maintenance. If we go the internal-provider route, maintenance burden is ours and small — a few hundred lines with a stable interface. If we consume the bundle under Symfony, we inherit an external cadence with no SLA and no observable community. v5.0.0 improves the picture slightly: the project responded to a PHP release, so "silence" is now "sporadic but real." That is still not a cadence we can plan a roadmap against, and it does not change the recommendation. The substantive change is branch-split maintenance — 4.x now exists for older PHP and should be assumed frozen.

Support. No vendor support, no meaningful issue-tracker throughput expected at 0 stars. Escalation is "read the source" or "fork it." That is acceptable for a glue layer and unacceptable for anything on the critical path of a revenue system. Position it accordingly. One note of caution: a maintainer who responds to platform bumps is a maintainer who may also merge upstream-breaking changes into a major without a migration guide — support burden can arrive from the direction of activity, not just neglect.

Scaling. Negligible runtime cost — this is dispatch plumbing, not a hot path. The scaling concern is organizational: every service that hand-rolls its own version of this pattern creates divergence. Publish once internally and enforce it, or don't adopt it at all. Half-adoption is the failure mode that costs the most. v5.0.0 adds a second scaling axis: version-divergent PHP floors across services now translate directly into divergent library versions.

Failure modes.

  • New: PHP floor cliff. A service on an older runtime cannot consume v5.x, silently falls back to an unmaintained 4.x, and drifts. Detect by asserting a single PHP floor across the fleet before adoption.
  • New: Unannounced breaking changes under a "bump" label. The major version here is honest, but the thin changelog sets a precedent that future majors may also ship with one-line notes. Mitigate by diffing the vendor tree between versions rather than reading release notes.
  • Upstream abandonment → fork under our org; MIT permits it; keep the diff in a single package.
  • Framework drift → the bundle's Symfony constraints rot faster than the pattern; another argument for owning our own glue.
  • Container misconfiguration → handler-not-found errors at runtime rather than boot; add a compile-time or boot-time assertion that every command has exactly one handler.
  • Hidden coupling to Symfony conventions (attribute-based tagging, autoconfigure) that don't translate → surfaces during the spike, not in production, if the spike is honest.
  • Metadata integrity risk (future-dated release, zero dependents) → downgraded. The timeline is now self-consistent; the residual risk is zero dependents, not metadata. Pin exact versions and vet the tarball regardless.

Ramp-up. Low for engineers familiar with CQRS-lite: the surface is a handful of interfaces and one convention. Budget roughly half a day of onboarding plus the spike, plus the PHP-floor gate up front. The real cost is cultural — introducing a command bus into a codebase that currently calls services directly changes how controllers are written and reviewed, and that's a multi-sprint adoption curve regardless of which package we install. Nothing in v5.0.0 changes this.

Recommendation. Unchanged in direction, tightened in preconditions. Do not add openclassrooms/use-case-bundle as a dependency in a Laravel codebase. Use it as a design reference, adopt the framework-agnostic core if its scope and PHP floor fit, and own the Laravel integration ourselves. Revisit the bundle itself only for Symfony-based services, where it is a plausible, if unsupported, drop-in. Action this week: read v5.0.0's composer.json, confirm the floor, and confirm whether the core openclassrooms/use-case library moved in lockstep — that single check determines whether this is adoptable at all in the next two quarters.

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.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core