Créez une annotation en Symfony 2

Au cours d'un projet, j'ai été amené à concevoir un bundle permettant à l'administrateur de saisir lui-même les contenus des e-mails envoyés par son application. Une question est vite remontée : comment lui laisser la possibilité d'injecter des variables dynamiques, par exemple le nom du destinataire ? La solution est très simple : les annotations Symfony 2.

Le déroulement est plutôt simple : créer une annotation et l'appliquer sur certaines méthodes de l'entité concernée, et à l'envoi de l'e-mail remplacer les variables du contenu par la valeur retournée par la méthode associée. Par exemple, pour l'entité User, la variable %user.fullname% du contenu de l'e-mail sera remplacée par la valeur retournée par la méthode getFullname.

Déclarez donc une annotation EmailAnnotation comme suit :

2 éléments sont particulièrement importants au niveau de l'en-tête de classe : la déclaration de @Annotation, et la déclaration de @Target("METHOD") indiquant ce sur quoi l'annotation sera appliquée (dans mon cas, uniquement les méthodes).

Dans l'entité User, chargez l'annotation et déclarez-la sur les méthodes adéquates :

Enfin, dans le service gérant l'envoi des e-mails, il suffit d'utiliser la class ReflectionClass permettant de lire les annotations. Pour ma part, j'utilise un service EmailManager qui va parser le contenu de l'e-mail avant de l'envoyer :

Je vous laisse maintenant le loisir de charger cette annotation dans votre administration afin de charger en 1 clic les variables dynamiques depuis l'entité User directement dans le contenu de l'e-mail. Vous verrez alors l'utilité de l'option description déclarée dans l'annotation ;)