Just another overengineered solution to a trivial problem, using the Symfony event dispatcher component.