NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #1869 most downloaded on Packagist
A small, flexible command bus. Handy for building service layers.
Last release 9 months ago
21 Dec 2025
Ships unpredictably
gaps range from 5 weeks to 4.9 years
Most releases are documented
notes for 8 of 12 stable releases
Nothing withdrawn
no release was ever pulled
12 years old
12 releases · first in 2015
Nothing published for this version
Nothing published for this version
BC Breaks: - None New features: - #118 - Added class name inflector
One column per quarter.
BC Breaks: - None New features: - #95: Added .gitattributes to speed up installation
BC Breaks: - None New features: - #96: More detailed error message when accidentally passing a non-object into the command bus (array, callable, strin
BC Breaks:
New features:
A CallableLocator added, allowing you to retrieve a handler from a single callable. Hopefully this can be used as an alternative to creating all the d
BC Breaks:
New features:
Bug fixes:
Middlewares are now checked for the correct interface
BC Breaks:
New features:
Bug fixes:
tl;dr CommandHandlerMiddleware now requires an extra first parameter, you just need to pass an instance of ClassNameExtractor to it.
tl;dr CommandHandlerMiddleware now requires an extra first parameter, you just need to pass an instance of ClassNameExtractor to it.
BC breaks:
Previously, the HandlerLocator interface was responsible for both mapping a Command to a string name AND looking up that string name in some sort of DI container or locator. That worked alright but made it difficult to use custom naming strategies with different DI containers. Therefore, we've made the following two changes:
CommandNameExtractor is responsible for mapping a Command to a string name.HandlerLocator::getHandlerForCommand() now accepts a string name instead of a Command object as its only parameter.CommandHandlerMiddleware now requires a CommandNameExtractor as its first parameter. To continue using the same behavior you've had until now, you only need to pass in an instance of ClassNameExtractorNew features:
HandleClassNameWithoutSuffix. Since many users suffix their command class names with -Command, this allows you to have Handler methods based on the class name but without that Suffix. In other words, the command class RentMovieCommand would be mapped to the method handleRentMovie.Bug fixes:
Removed the League\Tactician\Command interface. Now any plain ol' PHP object can be a command! See #43 and #45.
BC breaks:
League\Tactician\Command interface. Now any plain ol' PHP object can be a command! See #43 and #45.New features:
Bug fixes:
First public release!
First public release!
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →