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

Command Dispatcher Bundle Laravel Package

jeckel-lab/command-dispatcher-bundle

A Symfony bundle providing a lightweight command dispatcher for decoupling actions from their handlers. Dispatch command objects through a configurable bus, add middleware for cross-cutting concerns, and keep controllers thin with clean, testable service wiring.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Build vs. buy on the command bus layer. This package is a thin, MIT-licensed wrapper that wires a command dispatcher into a Symfony container. It informs the decision of whether to adopt an off-the-shelf dispatcher or write a ~200-line internal CommandBus + handler locator. The latest release — 0.4.1, a composer.json dependency fix and nothing else — is a maintenance hygiene patch, not a revival: no new features, no API changes, no support commitment. The honest PM read is unchanged: it is a reference implementation, not a dependency. Use it to scope the build, not to replace it.
  • CQRS-lite / action-handler architecture adoption. If the roadmap includes decoupling write operations (commands) from controllers/services into single-purpose handler classes with a middleware pipeline (logging, transactions, validation, auth, idempotency), this package defines the shape of that layer: one dispatcher service, attribute- or tag-based handler registration, container autoconfiguration.
  • Framework fit check (critical). The package targets Symfony, not Laravel. If the product is Laravel-based, this is a non-starter for direct adoption; it only contributes the pattern. If the estate is Symfony, it becomes a candidate for a bounded internal service.
  • Feature and refactor sequencing. Adopting a command bus is an architectural investment that pays off only when there is a critical mass of write use cases (checkout, onboarding, billing events). It should be scheduled alongside — not before — a real domain refactor, otherwise it adds indirection with no payoff.
  • Vendor/abandonment risk modeling. A single dependency-hygiene commit does not change the risk profile: the package still has effectively no downstream adoption and a single-maintainer cadence with a multi-year gap between functional releases. Any adoption decision must carry an explicit "we may own this forever" line item in the engineering budget. MIT license makes forking viable; the PM decision is whether forking is a cost we accept. Note that a composer.json-only patch signals housekeeping, not maintenance — it does not imply the bundle will track future Symfony majors.

When to Consider This Package

Consider it (or, more realistically, its pattern) when:

  • The platform is Symfony 5/6-era and the team already has or wants attribute-driven autoconfiguration for services. The 0.4.1 composer fix may ease install-time constraint conflicts, but it does not extend framework-version support.
  • You need a lightweight command bus without pulling in a full messaging transport, async workers, or a broker. If you need queues, retries, or distributed handling, use Symfony Messenger instead — it is maintained, first-party, and covers the same dispatch path plus transports.
  • You want to read a small, complete implementation to inform an internal CommandBus interface and handler-discovery convention.
  • The use cases are synchronous, in-process, single-tenant write operations where the overhead of a dispatcher is justified by testability or cross-cutting middleware.

Look elsewhere — and treat this as do not adopt — when:

  • The stack is Laravel. Laravel's service container, pipeline, and job dispatch already cover 80% of this; a stale Symfony bundle adds nothing but a porting cost.
  • You need active maintenance, security patching, or a support SLA. A dependency-only patch release after a long dormancy is not evidence of a support commitment; it remains a hard stop for anything on a revenue path.
  • You need async, event-driven, or distributed command handling — Symfony Messenger or a managed queue is the correct answer.
  • You need documented upgrade paths across framework majors. A single-maintainer bundle with no functional release history will likely not survive a Symfony 6→7 migration unassisted.
  • Your team has no existing CQRS conventions. Introducing a dispatcher without handler naming, validation, and transaction-boundary standards produces inconsistency, not architecture.

How to Pitch It (Stakeholders)

For executives: We re-checked a small open-source command dispatcher after a new patch release. The release contains a single change: a fix to its Composer dependency declarations. There are no new features, no security work, and no signal of ongoing support — it is one maintainer doing housekeeping. Our recommendation does not change: build the capability, use this as a reference design, do not vendor it into the product. The capability is genuinely small — roughly one engineering week to implement and own internally — so we are not blocked.

For engineering: Version 0.4.1 is a composer.json dependency fix only. It changes nothing about the API, the middleware surface, or framework-version compatibility. It is useful as a design sketch for an internal CommandBus, middleware pipeline (transaction, logging, validation), and one-handler-per-command convention. It remains unsuitable as a dependency: single maintainer, no meaningful downstream adoption, no functional release in years, and no evidence it will track Symfony major-version upgrades. If we need async or retries, standardize on Symfony Messenger rather than this bundle. If our stack is Laravel, this is pattern-only — our container and pipeline already give us the primitives.

Decision requested: Approve a small internal spike to define our own command/handler contract, with this package and Symfony Messenger as the two reference points; defer any external adoption until we have a documented handler convention and at least three concrete write use cases to justify the layer.

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.
skyraptor/chatter
edlugz/sasapay
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