Savez vous ce qu'est un polyfill ? Comme j'ai mis un peu de temps à pouvoir faire fonctionner les polyfills dans Symfony, je vous explique comment les intégrer rapidement. xD

Un Polyfill, qu'est ce que c'est ?

Un polyfill dans Symfony est du code qui permet d'avoir les fonctionnalités récentes de PHP sur une ancienne version que vous utilisez.

Par exemple, vous utilisez PHP 7.4 et vous souhaitez avoir les fonctionnalités de PHP 8.1, vous pouvez donc implémenter des polyfills pour avoir ces dernières.

Il existe également des polyfills dans d'autres languages, comme le Javascript par exemple.

Un peu de contexte

J'ai du utiliser les polyfills de Symfony car :

  • j'ai des projets en SF3, SF4 et des CMS qui ne fonctionnent pas en PHP 8 (super la rupture X8).
  • j'ai démarré un nouveau projet en SF 6.2 qui nécessite PHP 8.1 minimum.
  • mon serveur ne semble pas gérer le multi PHP.

Je me dis donc : “avant d’aller trop loin avec le nouveau projet, je vais revenir à SF 5.4 (dernière LTS)” sauf que lui non plus ne fonctionne pas avec PHP < 8 (erreur avec str_starts_with qui n’est disponible qu’en PHP 8 ).

Et c'est là donc qu'on me suggère d'utiliser les polyfills :D.

Les polyfills de Symfony

Pour toutes les versions de PHP et les divers fonctionnalités, il existe des polyfills dans symfony disponible ici: https://github.com/symfony/polyfill

Bien évidement, nous n'allons pas les utiliser tous. On va juste utiliser celles des plus récentes qu'on a besoin par rapport à notre version actuelle.

Intégration

Imaginons que nous sommes en PHP 7.4 et que nous ayons besoins des fonctionnalités de PHP 8.0 et PHP 8.1, nous allons donc executer les commandes suivantes:

composer require symfony/polyfill-php80
composer require symfony/polyfill-php81

Néanmoins, pour qu'ils soient actif, il faut supprimer les lignes suivantes dans le fichier composer.json:

    "replace": {
        "symfony/polyfill-ctype": "*",
        "symfony/polyfill-iconv": "*",
        "symfony/polyfill-php72": "*",
        "symfony/polyfill-php73": "*",
        "symfony/polyfill-php74": "*",
        "symfony/polyfill-php80": "*",  // <-- ligne à supprimer
        "symfony/polyfill-php81": "*"   // <-- ligne à supprimer
    },

Conclusion

Comme j'ai mis un peu de temps pour comprendre le fonctionnement et l'intégration de cette feature, je vous le partage, bien qu'en lisant cette article la solution parait simple xD.
Mais croyez moi, quand on ne connait pas le sujet, on peut rechercher pendant longtemps une solution et tourner en rond...

J'espère que cet article vous a été utile, et je vous dis à plus pour le prochain ! xD

Previous Post Next Post


Add a comment