itmedia/command-bus-bundle
A Symfony bundle that adds command bus support, letting you dispatch commands to dedicated handlers and keep business logic decoupled from controllers. It integrates with the service container for handler registration and execution.
Architecture fit. Unchanged by v0.5.0: this is a Symfony bundle, not a Laravel package. It depends on Symfony's Kernel, bundle registration, container compilation passes, and the tag system — none of which exist in Laravel's service-provider model. Fit for our Laravel estate remains effectively zero out of the box. The underlying concept — a command bus with command→handler mapping and middleware — remains a legitimate CQRS-lite pattern worth borrowing.
Integration feasibility. Still low, but one unknown is now closed. v0.5.0 declares PHP 7.4 and 8.x support, which retires the "does it even run on modern PHP?" question from the prior assessment. Everything else is unchanged: 3 stars, 0 dependents, score 0.045, a single release line last touched 2021-09-13, Russian-only description ("Реализация CommandBus"), no service provider, no config publishing, no facade, no community. The release note carries exactly one line and no detail — no Symfony version bump is mentioned, so the framework constraint question is untouched.
Technical risk. Still high, but the risk has consolidated into a single axis. The PHP compatibility risk is largely cleared — the code should install and execute on PHP 8.x. The Symfony constraint risk is now the whole story: a bundle from the 2021 era will likely pin symfony/* versions that collide with the components Laravel 10/11 ship, so composer require may still fail outright. Note that a PHP 7.4 floor is itself a signal about codebase age — pre-enums, pre-readonly, likely without modern type declarations — which is a quality concern for a fork, not a runtime blocker. Abandonment risk is unchanged: a one-line release note four-plus years after the fact is not maintenance, and the bus factor is still one.
Key questions. Revised: Which symfony/framework-bundle and symfony/* constraints does composer.json now allow, and do they survive a Laravel 10/11 install? Does "PHP 8" in the release note mean tested on 8.2/8.3, or merely "does not crash on 8.0"? Does the bus implement PSR-11/PSR-14 or Symfony's MessageBusInterface, or a bespoke contract we'd be locked into? Is handler resolution convention-based, attribute-based, or tag-based? Does it support middleware (transactions, validation, logging), and is any async transport path present, or is it synchronous-only? What is the license, and is there CI or test coverage at all?
Stack fit. Unchanged. For Laravel the idiomatic choices remain the framework's own bus (dispatch(), pipelines, queued dispatch), league/tactician, or Symfony Messenger. A command bus is a class→handler map run through a middleware pipeline; Laravel's container plus Illuminate\Pipeline expresses it in roughly a hundred lines with code the team already understands.
Migration path. Unchanged: treat the repository as a pattern reference, not a dependency. Read its handler-resolution and middleware design, then re-implement natively — a CommandBus contract, HandlerMiddleware, TransactionMiddleware, and a CommandBusServiceProvider binding a handler map or attribute-driven discovery. If a Symfony service appears anywhere in the estate, evaluate the bundle there first as a vendor candidate.
Compatibility. The PHP axis improved; the Symfony axis is still the blocking issue. v0.5.0 means a fork would not need a PHP-version retrofit, which modestly lowers fork cost if we ever insist on the original code. But confirm the symfony/framework-bundle constraint before any spike, and expect a conflict with Laravel's pinned Symfony components requiring widened constraints.
Sequencing. Unchanged: (1) timeboxed spike in a scratch Symfony 5/6 app on PHP 8.2 — install, read the source, confirm contracts and middleware model; (2) decide fork-versus-reimplement, defaulting to reimplement; (3) introduce behind our own CommandBus interface so the implementation stays swappable; (4) pilot in one bounded context with real write traffic before broader rollout.
Maintenance. Effectively unmaintained. A one-line release note is not a maintenance signal — there is no downstream pressure (0 dependents) and no community patch flow. Adoption still means permanent ownership: fork, patch, and audit transitive dependencies ourselves.
Support. Single maintainer, non-English documentation, no visible issue triage. Assume zero upstream support; require an internal owner and a runbook before production. v0.5.0 does not change the bus-factor-of-one conclusion.
Scaling. Unchanged. A synchronous bus scales with the web tier; there is no evidence of async transport, so long-running commands block the request cycle. Queue-backed or distributed handling must come from elsewhere — Laravel queues, Symfony Messenger. Container-based handler lookup is fine at moderate throughput; watch per-command middleware overhead under load.
Failure modes. Unregistered handler at runtime (needs a specific exception and alerting); middleware ordering bugs, e.g. a transaction committing before validation; silent misconfiguration of the handler map; Composer constraint drift breaking CI on Symfony upgrades — now the primary upgrade risk, since the PHP axis has some headroom; and abandonment pinning us to EOL framework versions. The PHP 7.4 floor also means a fork inherits pre-8.0 code style that will need modernizing before it meets our static-analysis bar.
Ramp-up. Conceptually cheap — an experienced developer reads the source in a day — but the opportunity cost remains high relative to native Laravel bus patterns the team already knows.
Recommendation. Unchanged in direction: do not take a runtime dependency. v0.5.0 removes the PHP-version objection but leaves the Symfony constraint, the abandonment profile, and the zero-dependent ecosystem exactly as they were — a one-line compatibility note does not revive a four-year-dormant bundle. Mine the repository for design patterns, implement the bus natively against our own interface, and revisit only if a Symfony service enters the estate and a maintained fork becomes someone's explicit ownership.
How can I help you explore Laravel packages today?