Présentation du CommonmarkBundle

Publié le 26/10/2020 à 20:05. Mise à jour le 31/10/2020 à 16:55.

Un bundle pour Symfony qui intègre league/commonmark.

Présentation du CommonmarkBundle

J'ai récemment publié un bundle pour Symfony (mon premier), je vous propose aujourd'hui d'en faire la présentation.

Pour ceux qui veulent juste voir le code: AymDev/CommonMarkBundle.

L'idée

J'écris beaucoup de contenu sur mon site en MarkDown: les cours et les articles. C'est très pratique, et je ne dois pas être le seul à le penser puisque c'est utilisé sur GitHub, StackOverflow, ...
Jusqu'à présent j'utilisais ParseDown (qui est très bien et simple à utiliser), mais je voulais faire une chose particulière: faire ouvrir les liens externes dans un nouvel onglet.

Recherche de solutions

En recherchant, je suis tombé sur une extension: taufik-nurrohman/parsedown-extra-plugin.
Sauf que la librairie n'est pas disponible sur Packagist et ne respecte pas le versioning sémantique. J'ai donc pensé à chercher des alternatives à ParseDown.

CommonMark

Très vite j'ai trouvé la librairie de la PHP League: CommonMark. C'est également facile à utiliser, mais ça fourni des extensions dont une pour les liens externes !
J'avais fait mon choix. Mais ensuite, comment intégrer ça dans Symfony ?

Services et bundles

De par l'utilisation de base de la librairie, j'ai pensé écrire un peu de configuration manuelle de services dans mon services.yaml. Mais avec la multitude d'extensions et les configurations différentes que j'aurais pu faire, j'ai pensé qu'un bundle simplifierait les choses.

Le problème: pas de bundle officiel, et ceux que j'ai pu trouver utilisent league/commonmark en v0.x, ou ne sont pas disponibles sur Packagist, ou ne permettent pas la gestion de plusieurs "converters".

Conclusion: faire mon propre bundle.

CommonmarkBundle

Création

Je n'avais jamais créé de bundle auparavant. J'ai lu la documentation de Symfony à ce sujet, commencé le développement, pour finir par pleurer lors de la réalisation de la configuration.
J'ai donc pris un cours sur le fonctionnement du conteneur de services, sa compilation en cache, les extensions de bundles, compiler pass, ...
Puis j'en suis finalement arrivé à bout malgré quelques erreurs !

Présentation

Voici donc AymDev/CommonMarkBundle !
Toute la documentation est présente sur le README. Il règle ce que je n'avais pas trouvé ailleurs:

  • installation via Composer: aymdev/commonmark-bundle
  • nécessite league/commonmark en v1.5 minimum
  • permet la configuration de plusieurs converters
  • fourni les convertisseurs par autowiring si besoin
  • fourni un filtre Twig

Conlusion

Si vous avez lu jusque là, sachez que cet article a été converti par un converter configuré par le bundle, et qu'un autre se charge des commentaires.
Il est tout de même important de mentionner les projets utilisés pour l'affichage de mon contenu:

N'hésitez pas à donner votre avis si vous l'essayez !

Commentaires: 2

K4gur0 16/01/2021 - 02:58
Félicitation Aymeric pour ton first bundle ! Ça me donne envi de m'y lancer, un de ces 4 je publierais les miens aussi :p
Ça mérite une étoile en plus sur ton Repo Github
Good job :)

bogdanradoi 04/11/2020 - 10:37
Hello Aymeric, ça à l'air TOP ton bundle Markdown. Je vais le tester. :)

Invasion robot en provenance de robohash.org