Autowiring resolves by type, and a string has no type to resolve — so every service with a configuration value needs an explicit argument, which is the thing…
A service injected into a controller is constructed on every request that hits it, including the requests that never call it — and for an expensive constructor that…
A rate limiter is four lines of Redis and a decision between two algorithms that behave differently at the boundary, and most hand-rolled ones pick the worse of…
4.3 made Messenger stable, and the registration mechanism is autoconfiguration on an interface — so a handler is a class with one method and no boilerplate. The message…
Injecting a fake payment gateway into a functional test usually means a container manipulation in the test setup, which is fragile and runs after the container is compiled.…
21 November brought both, with identical features — 4.4 is the LTS with deprecations still present, and 5.0 is the same code with them removed. That is a…
Wrapping a handler in a transaction inside the handler means every handler repeats it, and the one that forgets is the one that leaves half a write. Ordering…
A job class that knows which queue it belongs on has made a deployment decision at the point of definition, and changing it means editing the class. Unrouted…