Quotidien Shaarli

Tous les liens d'un jour sur une page.

Hier - October 19, 2026

PostgreSQL haute disponibilité avec Symfony : réplicas, standby, Patroni, HAProxy et Outbox

Présentation d’une architecture PostgreSQL résiliente pour une application Symfony : un primaire pour les écritures, un standby synchrone pour limiter le risque de perte de données et des réplicas asynchrones pour répartir les lectures. Patroni et etcd orchestrent le basculement automatique ; HAProxy maintient des points d’accès stables. Doctrine répartit les connexions lecture/écriture, tandis que le pattern Outbox avec Symfony Messenger sécurise l’enregistrement des événements métier. L’article aborde aussi les retards de réplication, l’idempotence, la reconnexion des workers et les tests de failover.

Versioning a Symfony API without duplicating your classes

Symfony 8.2 introduit des possibilités de versionnement d'API sans duplication des classes ni transformation manuelle des réponses. Le Serializer permet d'associer #[SerializedName] et #[SerializedPath] à des groupes de sérialisation pour adapter les noms et la structure des champs selon la version. L'option ignored_groups facilite l'exclusion de propriétés. L'article détaille les pièges de configuration, recommande des tests stricts des contrats JSON et précise quand conserver des classes distinctes, notamment lorsque la logique métier ou les validations divergent.

What requirements don't you have?

Une architecture logicielle réussie dépend autant des contraintes qu’on accepte d’abandonner que de celles qu’on respecte. Tolérer des données temporairement périmées, des écritures non transactionnelles ou quelques pertes de métriques peut simplifier fortement un système et améliorer ses performances. Ces arbitrages exigent un dialogue entre ingénieurs et responsables produit. Avec les agents de programmation, le risque s’accentue : les LLM ajoutent spontanément des vérifications, verrous et garanties non demandés, produisant une complexité inutile. La revue de code doit donc aussi supprimer ces exigences imaginaires.

Symfony et IA générative : le LLM propose, l’application décide

Pour intégrer l’IA générative à Symfony sans déléguer les règles métier au modèle, l’auteur distingue les rôles du RAG (recherche documentaire), de MCP (accès aux outils), des agents (enchaînement d’actions) et de l’orchestrateur (coordination des parcours autorisés). Il propose une architecture en cinq niveaux, inspirée de l’architecture hexagonale, où les services métier conservent les décisions et les contrôles d’accès. L’article détaille aussi les exigences de production : validation des arguments, protection contre les injections de prompt, confirmations humaines, observabilité, coûts et tests.

Postgres RLS in Symfony: the login role owned no table, read both tenants' invoices, and my setup check said nothing

Dans une application Symfony multi-tenant, un rôle PostgreSQL ne possédant aucune table peut néanmoins contourner les politiques Row-Level Security (RLS) s’il hérite des privilèges du propriétaire. L’auteur montre pourquoi un contrôle fondé sur current_user et session_user passe à côté de cette faille et recommande pg_has_role pour inspecter les appartenances. Il détaille une configuration à trois rôles avec GRANT ... WITH INHERIT FALSE, SET TRUE, puis souligne un piège de Doctrine DBAL : SET LOCAL ROLE et le contexte du tenant doivent être appliqués dans une transaction englobant les lectures.

Redis with Symfony 7: Speed Up Your API with Caching, Invalidation, and Rate Limiting

Guide pratique pour accélérer une API Symfony 7 avec Redis à partir d’un catalogue de produits. Il montre comment configurer Redis via Docker, créer un pool de cache avec tags, appliquer le modèle Cache-Aside et invalider les données après modification en base. L’article ajoute une limitation du trafic avec le composant Rate Limiter de Symfony et détaille le suivi des hits/misses, de la mémoire et des TTL. Il rappelle enfin les précautions de production : isoler Redis, éviter les données périmées et mesurer les gains réels.

How I Prove a Symfony Application Really Forgot a Customer

Un test qui vérifie seulement la réussite d’une commande d’effacement ne prouve pas que les données personnelles ont disparu. L’auteur propose des tests d’intégration Symfony fondés sur des marqueurs synthétiques et des lectures directes des bases de données, projections, index de recherche, caches et transports d’échec Messenger, sans se fier aux filtres Doctrine. Il recommande aussi de reconstruire les projections, simuler des pannes, tester l’idempotence et documenter les traces résiduelles autorisées. Cette vérification technique reste limitée aux stockages recensés et ne constitue pas une certification de conformité au RGPD.

Bringing Time Under Control in PHP: PSR-20 and Symfony Clock

Lire l’heure système directement (new DateTimeImmutable(), time()) rend les règles métier difficiles à tester et provoque des tests lents ou instables. PSR-20 standardise l’accès au temps via ClockInterface::now(). Symfony Clock fournit des horloges réelles et simulées (NativeClock, MockClock) : on peut figer ou avancer instantanément le temps, tester les échéances exactes et éviter les attentes réelles. L’article détaille aussi l’injection de dépendances, ClockSensitiveTrait, les différences entre horloges injectées et globales, ainsi que les pièges liés aux fuseaux horaires.