jms/command-bundle
Symfony bundle that integrates a command bus for dispatching command objects to service-based handlers. It adds middleware support for cross-cutting concerns and helps organize business operations into explicit, decoupled, and testable commands.
Architecture fit: none for a Laravel codebase. jms/command-bundle is a Symfony2 bundle, not a Laravel package. It integrates through Symfony's AppKernel::registerBundles(), the Symfony DI container, and the console.command tag. Laravel has no bundle concept — it uses service providers, the Illuminate\Console\Kernel, and Artisan command registration. There is no adapter layer that makes a Symfony2 bundle loadable in Laravel; the only realistic use would be copying individual command classes out of the bundle and rewriting them as Artisan commands.
Integration feasibility: near zero as a dependency.
symfony/* packages (2.0–2.8), while Laravel 9/10/11 depend on Symfony 6/7 components. These requirements conflict transitively, so even --dev installation is likely blocked.--ignore-platform-reqs in a legacy tree), the code targets PHP 5.x idioms and is unlikely to run cleanly on PHP 8.1+, which is the supported range for current Laravel.Technical risk: high, and concentrated in the "is this even alive" question.
Key questions to resolve before any further evaluation spend:
php artisan make:*, custom Artisan commands, or existing maintained tooling?Verdict: recommend reject as a dependency. Re-evaluate only as a source of inspiration — a read-only reference for command implementations worth reimplementing natively.
Stack fit: not applicable. The target stack is Laravel on PHP 8.1+ with Symfony 6/7 components under the hood. The package assumes Symfony 2.x full-stack. These are different frameworks sharing a vendor namespace, not different versions of the same thing.
Migration path. Do not attempt a bundle-to-provider shim. The workable path is extraction, in this order:
Command/ directory and list every command, its inputs, and its side effects. This is a one-to-few-hour exercise given the package size.Illuminate\Console\Command subclasses registered in a service provider, with tests. Preserve the original licence/attribution headers per the repo's terms.composer.json.Compatibility. Assume none out of the box: PHP 5-era syntax, Symfony 2 DI semantics (services.yml with 2.x schema), and likely PSR-0 autoloading conventions. Any port is a rewrite against modern PHP, not a compatibility shim.
Sequencing. If the team insists on pursuing it, timebox strictly: a one-day spike to produce the command inventory and a per-command disposition table. Gate any porting work behind that table — do not schedule implementation before triage. The spike should run in parallel with, not ahead of, evaluating the Artisan-native alternative, because the likely outcome is that the alternative wins on effort alone.
Maintenance. Owning a vendored copy of unmaintained code transfers 100% of maintenance to us with no upstream to rebase against. That is acceptable for a small, stable, well-understood utility command; it is not acceptable for anything load-bearing. Ported commands should be treated as first-class internal code with tests and an owner, not as "third-party glue."
Support. Effectively zero. No active maintainer, no issue triage on a Symfony2-era bundle, no security advisory channel we can subscribe to. Any incident is ours to diagnose from source. Escalate this explicitly to whoever owns the dependency-approval policy — this is precisely the class of package that should fail a supply-chain gate.
Scaling. The commands are developer-facing tooling, so production scaling is a non-issue provided nothing leaks into the runtime path. The real scaling concern is organizational: every developer who learns a bespoke ported command must also learn that it is a fork with no upstream docs. Prefer Artisan-native equivalents that new hires already know.
Failure modes.
composer.json, reintroducing the conflict for everyone.Ramp-up. Near zero for the package (it does little), but non-trivial for the decision: the main cost is the review cycles spent establishing that a Symfony2 bundle does not belong in a Laravel stack. Close that question once, document the disposition, and route future discovery hits of the same shape (Symfony bundle surfaced for a Laravel project) through a filter so they do not consume assessment capacity again.
How can I help you explore Laravel packages today?