API Platform 3.1 : votre ressource n'a pas à être votre entité

Quatre mois après la 3.0, API Platform 3.1 est arrivé avec le premier lot de fonctionnalités construites sur le nouveau modèle d’état. Tous les changements ne sont pas spectaculaires, mais l’un d’eux résout un problème qui a engendré beaucoup de contournements alambiqués en 2.x : votre ressource API n’a plus besoin d’être votre entité Doctrine. La séparation ressource/entité En 2.x, API Platform fonctionnait mieux quand votre ressource API et votre modèle de persistance étaient la même classe. Utiliser un DTO comme surface API était possible via le système Input/Output DTO, mais ce système a été supprimé en 3.0 — il compliquait le modèle d’état sans apporter suffisamment de bénéfices. ...

23 janvier 2023 · 4 min · Guillaume Delré

PHP 8.2 : les classes readonly et la dépréciation qui compte vraiment

PHP 8.2 est sorti le 8 décembre. Les classes readonly font les gros titres. La dépréciation des propriétés dynamiques, elle, demande votre attention concrète. Les propriétés dynamiques dépréciées PHP a toujours permis d’ajouter des propriétés à des objets sans les déclarer dans la classe : class User {} $user = new User(); $user->name = 'Alice'; // aucune déclaration, aucune erreur... jusqu'ici En 8.2, ça déclenche un avertissement de dépréciation. En PHP 9.0, ce sera une erreur fatale. Le délai de grâce existe, mais le compteur tourne. ...

22 janvier 2023 · 5 min · Guillaume Delré

API Platform 3.0 : un nouveau modèle d'état et la fin des DataProviders

API Platform 3.0 est arrivé en septembre 2022 avec Symfony 6.1 comme prérequis strict et une architecture de base qui ne ressemblait en rien à la 2.x. Le guide de migration est long. La raison pour laquelle il est long est intéressante. L’ancien modèle avait une fuite conceptuelle. DataProviderInterface et DataPersisterInterface étaient appelés pour chaque requête HTTP, mais le provider recevait le contexte de l’opération comme un indice — pas comme un contrat. Un provider de collection et un provider d’item étaient des interfaces distinctes, mais les deux vivaient dans le même seau mental : “choses qui retournent des données.” La couche HTTP savait ce qui était demandé ; le provider devait reconstruire cette connaissance à partir d’indices passés dans le tableau $context. ...

18 novembre 2022 · 4 min · Guillaume Delré

PHP 8.1 : enums, fibers, et un système de types qui grandit

PHP 8.1 est sorti le 25 novembre. Il fait suite à la refonte massive de 8.0 avec quelque chose de différent : moins de fonctionnalités, mais chacune vraiment réfléchie plutôt que greffée à la va-vite. Les enums C’est la nouveauté qui change les bases de code dès la mise à jour. Avant 8.1, les énumérations en PHP se résumaient à des constantes de classe, des chaînes ou des entiers sans rien pour les faire respecter : ...

9 janvier 2022 · 6 min · Guillaume Delré

PHP 8.0 : match, arguments nommés, attributs et JIT

PHP 8.0 est sorti le 26 novembre. Je le fais tourner depuis six semaines sur un projet perso et un nouveau service au boulot. C’est la version PHP la plus significative depuis 7.0, et à certains égards plus impactante, parce que les changements se renforcent mutuellement de façon utile. JIT Le compilateur Just-In-Time était l’annonce principale. La réalité en production est plus nuancée : pour les applications web typiques (requêtes en base, appels HTTP, rendu de templates) les gains sont modestes, parce que ces workloads sont limités par les I/O, pas par le calcul. Là où le JIT brille vraiment, c’est le code intensif en CPU : manipulation d’images, transformation de données, calcul mathématique. ...

10 janvier 2021 · 9 min · Guillaume Delré

Élagage des révisions avec des window functions et des logarithmes, quand DQL ne suffisait plus

Chaque mise à jour de contenu sur la plateforme crée une révision. C’est délibéré : les éditeurs ont besoin d’un historique sur lequel ils peuvent revenir, et la plateforme a besoin d’une piste d’audit. Ce que personne n’avait anticipé, c’était le rythme. Certains articles passent par quarante sauvegardes en un seul après-midi. Une pièce à fort trafic accumule des centaines de révisions sur sa durée de vie. Après quelques mois, la table de révisions avait plusieurs millions de lignes. ...

27 septembre 2020 · 8 min · Guillaume Delré

PHP 7.4 : les propriétés typées et les arrow functions qu'on attendait

PHP 7.4 est sorti le 28 novembre. C’est la dernière version 7.x avant PHP 8.0, et ça se sent. Les fonctionnalités sont suffisamment substantielles pour tenir debout seules, mais elles ressemblent aussi à des fondations pour ce qui arrive. Les propriétés typées C’est la grande nouveauté. Depuis PHP 7.0, on pouvait typer les paramètres de fonctions et les valeurs de retour. Mais les propriétés de classe ? Toujours non typées : ...

12 janvier 2020 · 7 min · Guillaume Delré

PHP 7.3 : des petites victoires qui s'accumulent

PHP 7.3 est sorti le 6 décembre. Pas de fonctionnalité phare. C’est une collection d’améliorations du quotidien qui, individuellement, semblent mineures, mais qui ensemble rendent le travail de tous les jours nettement moins agaçant. Heredoc et nowdoc flexibles Jusqu’à 7.3, le marqueur de fermeture d’un heredoc devait être en colonne zéro. Ce qui forçait une désindentation maladroite dans du code par ailleurs bien formaté : // avant $html = <<<HTML <div> <p>Hello</p> </div> HTML; // devait être en colonne 0, moche // après $html = <<<HTML <div> <p>Hello</p> </div> HTML; Le marqueur de fermeture peut désormais être indenté pour correspondre au code environnant, et cette indentation est retirée du contenu. Ça paraît cosmétique. Ce n’est pas le cas. Les heredocs dans des contextes imbriqués (méthodes de classe, conditions) étaient visuellement dissonants avant. Maintenant ils s’intègrent. ...

20 janvier 2019 · 6 min · Guillaume Delré

PHP 7.2 : adieu mcrypt, bonjour sodium

PHP 7.2 est sorti le 30 novembre. La grande nouvelle n’est pas une nouvelle fonctionnalité, c’est une suppression. mcrypt disparaît. C’est une bonne chose, même si ça ne le semble pas quand c’est vous qui devez faire la migration. Le problème mcrypt mcrypt n’est plus maintenu depuis 2007. Plus d’une décennie de stagnation dans une bibliothèque cryptographique. Dépréciée en 7.1, elle est retirée définitivement en 7.2. Son remplaçant : sodium, désormais intégré comme extension core. ...

14 janvier 2018 · 7 min · Guillaume Delré

Forcer l'UTC dans Doctrine sans toucher aux entités

Un timestamp qui revient de la base de données avec une heure de décalage. Pas à chaque fois. Uniquement quand le serveur de dev tourne en Europe/Paris et que la CI tourne en UTC. Le genre de bug qui disparaît quand on le cherche et qui revient en production un vendredi soir. Le problème n’est pas dans la logique métier. Il est dans ce que Doctrine fait discrètement avec les dates. ...

19 février 2017 · 4 min · Guillaume Delré