implement event engine based on symfony's component