Symfony

Simplifier le debug de son application: étendre le Profiler Symfony

Il m’est arrivé à plusieurs reprises d’implémenter des fonctionnalités assez avancées, un petit peu magiques, sur des applications Symfony. Dans ces cas-là, je me suis toujours demandé comment rendre cette « magie » visible et facilement compréhensible pour le restant de l’équipe, et pour moi-même dans le futur. L’enjeu était de rendre apparent et clairs ces fonctionnements, même pour un junior qui découvre le projet, sous peine sinon de devenir le seul à connaître certains fonctionnements et à faire perdre du temps aux autres à suivre ce qui se passe.

Je vais détailler deux astuces: comment ajouter un icône à la debug toolbar et un panneau au profiler Symfony d’une part, et comment ajouter des informations sur la timeline, le graph « performances » du profiler, grâce au composant Stopwatch d’autre part.

Ajouter un panneau à la Debug Toolbar

Dans un projet en cours de refactor, je voulais utiliser partout des annotations @Security pour la gestion des droits d’accès aux différentes routes. Je cherchais un moyen simple de vérifier que je n’avais oublié aucun contrôleur.
La solution que j’ai trouvée est d’ajouter un DataCollector, qui va nous permettre d’ajouter un message (et une icône) dans la Debug toolbar, ainsi qu’une page dans le profiler, accessible en cliquant dessus.

Dans cet exemple, nous allons réaliser un Data Collector très simple, qui permet de connaître l’annotation @Security du controller courant. Cet exemple est donné pour Symfony 3, pour Symfony 4, il faudra remplacer AppBundle par App et déplacer le template dans templates/.

L’implémentation est très rapide: il faut ajouter un service, implémentant la DataCollectorInterface, et une vue Twig, respectant quelques conventions.
Le service devra être déclaré manuellement, même si vous utilisez l’autowiring, afin de pouvoir préciser dans sa configuration où est placée votre vue Twig.

Le résultat en images:

Le nouveau panneau dans le profiler Symfony

Utiliser le composant Stopwatch pour ajouter des information à la timeline

Autre possibilité, dans un projet nous utilisions un bus de commande, comme j’ai pu en parler précédemment. Problème, il est rapidement difficile de suivre quels middlewares sont appelés, dans quel ordre, et combien de temps ils consomment.
L’idée ici est de les ajouter à la timeline présente dans l’onglet « Performances » du profiler, pour en avoir une représentation très visuelle. Pour cela nous allons faire appel au composant Stopwatch de Symfony, qui est malheureusement assez méconnu.

Le code est très simple, voici un exemple des deux appels nécessaires:

J’ai appliqué cet exemple dans une action de controller, voici le résultat dans le profiler:

Une nouvelle section « netinfluence » avec notre temps est apparue!

Petit bilan

J’espère que ces deux astuces vous aideront à rendre plus facilement maintenable votre application. Pour moi, la maintenabilité d’une application est un critère important dans sa qualité, et qui demande des efforts, tout comme Symfony a une politique de DX, « Developper eXperience » pour faciliter sa prise en main. N’hésitez pas à prolonger la discussion sur Twitter ou par e-mail à romaric[at]netinfluence.ch!

Visited 122 times, 1 visit(s) today