tillkruss/laravel-tactician
Laravel integration for the Tactician command bus, letting you dispatch commands to handler classes through Laravel's container. Includes a service provider, facade, and config for mapping commands to handlers and middleware.
Architecture fit
league/tactician, mapping Laravel's container to Tactician's handler locator and middleware pipeline. Conceptually it fits any Laravel app: controllers stay thin, commands/handlers encapsulate use cases, middleware handles cross-cutting concerns (transactions via DoctrineTransactionMiddleware equivalents, logging, validation).Illuminate\Contracts\Bus\Dispatcher, dispatch(), ShouldQueue, Bus::pipeThrough, job middleware). The package's value proposition has effectively been absorbed by the framework.Integration feasibility
composer.json require block is inspected. Expect hard pins to illuminate/* 5.1–5.2 era and PHP 5.5/7.0 constraints that fail resolution against Laravel 8+ or PHP 8.x.Technical risk
league/tactician API surface.Key questions
illuminate/* and php constraints does the tagged composer.json declare, and can it resolve against our current composer.lock?league/tactician that conflicts with newer versions we may already depend on?Stack fit
CommandBus port to preserve the same architectural boundary.CommandBus interface, Next-style middleware), the dependency to evaluate is league/tactician directly, not this wrapper.Migration path
App\Bus\CommandBus) so the implementation — package, fork, or native — is swappable via container binding.Compatibility
Container::build() semantics.Sequencing
composer require in a throwaway branch against our actual lock file; capture resolution errors and PHP 8 fatals as evidence.Maintenance
Support
1.0.0 changelog — no upgrade guide, no version support matrix.Scaling
Failure modes
Ramp-up
Recommendation for the TPM: Do not adopt. The pattern is worth keeping; this artifact is not. Capture the architectural intent (thin controllers, one handler per use case, middleware for transactions) in an ADR, implement it on Laravel's native bus behind an owned interface, and revisit only if the platform is discovered to be genuinely pinned to Laravel 5.x with no upgrade path in the next two quarters — in which case fork and own it explicitly rather than depending on an archived package.
How can I help you explore Laravel packages today?