Try Event Displatcher component of Symfony2