# lecodeestdanslepre > PHP, Symfony, développement web et culture tech : les expériences, tutoriels et réflexions de Pierre sur lecodeestdanslepre. Blog personnel en français de Pierre. Les URL canoniques, les dates et les sources figurent dans chaque document Markdown. Les contenus techniques décrivent leur contexte de publication ; vérifiez leur date avant de les appliquer. Cet index facilite la découverte des contenus publics ; il ne constitue pas une licence de réutilisation. ## Repères - [Sitemap](https://lecodeestdanslepre.fr/sitemap.xml) - [Flux RSS](https://lecodeestdanslepre.fr/feed.xml) - [Schéma des métadonnées](https://lecodeestdanslepre.fr/schemas/content.schema.json) ## Pages - [À propos](https://lecodeestdanslepre.fr/markdown/a-propos.md): Pierre, développeur PHP/Symfony. Sur ce blog, des billets techniques sans blabla inutile : choix d'archi, ratés assumés, et ce qu'on apprend vraiment en faisant cracher son site. - [Accueil](https://lecodeestdanslepre.fr/markdown/index.md): Blog technique sur Symfony et PHP : tutoriels, retours d'expérience et réflexions d'un développeur passionné par le code propre et l'écosystème web moderne. - [Tous les billets](https://lecodeestdanslepre.fr/markdown/billets.md): Parcourez tous les billets du blog : tutoriels Symfony, astuces PHP, architecture logicielle et retours d'expérience d'un développeur du quotidien. - [Catégories](https://lecodeestdanslepre.fr/markdown/categories.md): Explorez les billets par thématique : Symfony, PHP, architecture, tests, DevOps et plus encore. Trouvez rapidement les sujets qui vous intéressent. - [Contact](https://lecodeestdanslepre.fr/markdown/contact.md): Contacter Pierre, auteur du blog lecodeestdanslepre, à propos de PHP, Symfony et du développement web. - [Mentions légales](https://lecodeestdanslepre.fr/markdown/mentions-legales.md): Informations sur Pierre, éditeur du blog lecodeestdanslepre, son hébergement, les données personnelles et les conditions d’utilisation du site. - [Politique de confidentialité](https://lecodeestdanslepre.fr/markdown/politique-de-confidentialite.md): Données techniques, mesure d’audience sans cookie, contact par e-mail et confidentialité sur lecodeestdanslepre. ## Sujets - [Café](https://lecodeestdanslepre.fr/markdown/categories/cafe.md): Le coin détendu du blog : billets légers, formats hors cadre, blabla de dev assumé. À lire un café à la main. - [Code quality](https://lecodeestdanslepre.fr/markdown/categories/code-quality.md): Outils, métriques et pratiques pour mesurer et améliorer la qualité du code PHP : analyse statique, refactoring, revue de code. - [Devlog](https://lecodeestdanslepre.fr/markdown/categories/devlog.md): Retours d'expérience sur des projets réels : décisions techniques, compromis et résultats mesurés. - [DevOps](https://lecodeestdanslepre.fr/markdown/categories/devops.md): Déploiement, CI/CD, conteneurisation et gestion d'infrastructure pour applications PHP et Symfony. - [DX](https://lecodeestdanslepre.fr/markdown/categories/dx.md): Configuration d'environnements de développement, outillage et automatisation du workflow quotidien. - [ÉcoConception](https://lecodeestdanslepre.fr/markdown/categories/ecoconception.md): Réduire l'empreinte environnementale du web : sobriété du code, optimisation du poids des pages et efficience des ressources serveur. - [PHP](https://lecodeestdanslepre.fr/markdown/categories/php.md): Fonctionnalités du langage, évolutions récentes et techniques avancées en PHP 8.x. - [Sécurité](https://lecodeestdanslepre.fr/markdown/categories/securite.md): Vulnérabilités courantes, contre-mesures et bonnes pratiques de sécurité pour les applications web PHP. - [SEO](https://lecodeestdanslepre.fr/markdown/categories/seo.md): Le SEO vu par un ingénieur : performance, balisage, rendu serveur et impact de l'IA. Mesurez vos résultats pertinents et adaptez votre stratégie technique. - [Symfony](https://lecodeestdanslepre.fr/markdown/categories/symfony.md): Architecture, composants et patterns avancés du framework Symfony. - [Symfony AI](https://lecodeestdanslepre.fr/markdown/categories/symfony-ai.md): Le Symfony AI Bundle en pratique : brancher une plateforme d'inférence, exposer un agent, faire du RAG et appeler un LLM depuis une vraie application Symfony. - [Tailwind](https://lecodeestdanslepre.fr/markdown/categories/tailwind.md): Intégration, configuration et usage avancé de Tailwind CSS dans des projets PHP et Symfony. - [Tech](https://lecodeestdanslepre.fr/markdown/categories/tech.md): Le numérique au-delà du framework : IA, économie de la tech, outils et tendances qui touchent les développeurs sans être propres à PHP ou Symfony. - [Tests](https://lecodeestdanslepre.fr/markdown/categories/tests.md): Tests unitaires, fonctionnels et d'intégration : stratégies, outils et patterns pour PHP et Symfony. - [UX](https://lecodeestdanslepre.fr/markdown/categories/ux.md): Décisions d'interface qui impactent l'utilisateur : accessibilité, navigation, feedback et performance perçue. - [WordPress](https://lecodeestdanslepre.fr/markdown/categories/wordpress.md): Développement WordPress : architecture de plugins, sécurité, performance et maintenance. ## Articles - [Homebrew, Docker, nvm, worktrees : une seule commande pour tout nettoyer](https://lecodeestdanslepre.fr/markdown/billets/homebrew-docker-nvm-worktrees-une-seule-commande-pour-tout-nettoyer.md): Ma fonction Zsh update : topgrade, Homebrew, Docker, nvm et les worktrees Claude Code sous une seule commande, avec un bilan d'espace en Go. - [La QA, c'est quoi ? Demandez aux 8,5 millions d'écrans bleus](https://lecodeestdanslepre.fr/markdown/billets/qa-qualite-logicielle.md): Écrans bleus CrowdStrike, panne Cloudflare, scandale Horizon : ce que coûte une QA absente, et la carte des outils qui protègent un projet web. - [Pest 5 : la migration qui a fait avouer ma suite verte](https://lecodeestdanslepre.fr/markdown/billets/pest-migration-tests.md): Migration Pest 5 sur un blog Symfony : extensions PHPStan jamais chargées, Xdebug fantôme, gate divisé par 50. Ce qu'une suite verte peut cacher. - [Les agents IA qui piratent tout seuls : accident isolé ou début de série ?](https://lecodeestdanslepre.fr/markdown/billets/agents-ia-qui-piratent-tout-seuls.md): Configuration réseau défaillante, et non une IA folle, est la cause de la compromission de systèmes externes par des agents d'IA, révèle cette analyse. - [Cisco FMC : un mot de passe codé en dur, en 2026, dans un pare-feu d'entreprise](https://lecodeestdanslepre.fr/markdown/billets/cisco-fmc-mot-de-passe-code-en-dur.md): Un mot de passe codé en dur dans Cisco Secure FMC, exploité avant correctif : mécanisme, chaînage, et comment tenir les secrets hors du code web. - [Symfony 8.2 : des URLs signées à usage unique, sans stockage](https://lecodeestdanslepre.fr/markdown/billets/urls-signees-usage-unique-symfony-8-2.md): Symfony 8.2 ajoute l'usage unique aux URLs signées d'UriSigner via un jeton d'état replié dans le HMAC. Mécanisme, limites et comparaison avec login_link. - [Twig 3.28 : le sandbox arrête de tout emballer, les macros redeviennent dynamiques](https://lecodeestdanslepre.fr/markdown/billets/twig-3-28-sandbox-macros-dynamiques.md): Découvrez les nouveautés de Twig 3.28 : le retour des macros dynamiques grâce à l'opérateur point et un sandbox plus performant. Auditez vos extensions Twig. - [Le SEO tué par l'IA ? Les chiffres ne mesurent pas la même chose](https://lecodeestdanslepre.fr/markdown/billets/seo-ia-guerre-des-chiffres.md): Zéro-clic, AI Overviews : ces chiffres ne mesurent pas la même chose. Comment lire leur périmètre, et mesurer la dépendance réelle de votre site à Google. - [Une timeline et un bouton « Copy as text » : la page d'exception Symfony se redessine](https://lecodeestdanslepre.fr/markdown/billets/page-exception-symfony-redesign-copy-as-text.md): La page d'exception Symfony se réinvente avec une timeline cliquable et un bouton « Copy as text » pour faciliter le debug avec les IA. Analyse des changements. - [Les macros Twig : des fonctions qui ne voient rien](https://lecodeestdanslepre.fr/markdown/billets/macros-twig.md): Les macros Twig dans Symfony : syntaxe, import, portée et bug invisible. Ce billet explore leurs limites et quand les remplacer par des Twig Components. - [Un RAG sur son propre blog : pour me relire, pas pour écrire](https://lecodeestdanslepre.fr/markdown/billets/rag-editorial-relire-corpus.md): Monter un RAG sur son blog pour vérifier ses écrits. Découvrez le montage canonique et décomposé de Symfony AI pour chercher avant de générer vos contenus. - [Cyber Resilience Act : mainteneur, steward ou simple passant ?](https://lecodeestdanslepre.fr/markdown/billets/cyber-resilience-act-mainteneur-steward-dev-php.md): Le 11 septembre 2026, les obligations de signalement du CRA s'activent. Fabricant, steward ou hors champ : ce qui tombe (ou pas) sur un dev PHP. - [L'affiche avant le film : des images OG dessinées en PHP, sans Chromium](https://lecodeestdanslepre.fr/markdown/billets/images-og-dessinees-en-php.md): Générez des images OG personnalisées en PHP avec GD et Imagick, sans Chromium ni IA. Apprenez le processus complet incluant Glide et la gestion des caches. - [JSON-LD et schema.org : baliser pour l'ère des agents](https://lecodeestdanslepre.fr/markdown/billets/json-ld-ere-agentique.md): Décryptage du JSON-LD et Schema.org en 2026 : comment baliser pour les agents IA et ce qui ne sert plus à rien dans votre structuration de données. - [Le backup de Schrödinger : rejouer son pg_dump avant d'en avoir besoin](https://lecodeestdanslepre.fr/markdown/billets/backup-schrodinger-restaurer-pg-dump.md): Votre pg_dump tourne mais savez-vous le restaurer ? Mesurez votre RTO avec un exercice concret et répété. Évitez le cas du backup qui ne marche jamais. - [EasyAdmin : sécuriser un admin sans toucher à setPermission()](https://lecodeestdanslepre.fr/markdown/billets/easyadmin-securiser-un-admin-sans-toucher-a-setpermission.md): Comment sécuriser une interface EasyAdmin avec Symfony sans toucher à setPermission(). Aperçu des couches access_control, #[IsGranted] et gardes métier. - [EasyAdmin : écrire un filtre custom du FilterInterface au FilterType](https://lecodeestdanslepre.fr/markdown/billets/easyadmin-ecrire-un-filtre-custom-du-filterinterface-au-filtertype.md): Filtres custom Symfony : créez vos filtres pour EasyAdmin 5 avec FilterInterface et FilterType. Idéal pour des besoins spécifiques comme la date de mise en avant. - [Doctrine sous EXPLAIN : profiler ce blog jusqu'à l'index](https://lecodeestdanslepre.fr/markdown/billets/doctrine-postgresql-explain-n-plus-1.md): Profiler un blog Symfony réel : requêtes comptées au profiler Doctrine, plans lus sous EXPLAIN ANALYZE, index vérifiés dans pg_stat_user_indexes en prod. - [WebMCP : exposer un site aux agents](https://lecodeestdanslepre.fr/markdown/billets/webmcp-symfony-stimulus.md): WebMCP permet aux agents de consulter votre site avec des actions typées. Découvrez comment exposer une page Symfony à un agent avec ce draft W3C. - [Mesurer le trafic IA dans ses logs](https://lecodeestdanslepre.fr/markdown/billets/mesurer-trafic-ia-logs-crawlers.md): 13,5 jours de logs Caddy analysés : qui crawle un blog PHP, ce que pèsent GPTBot et ClaudeBot, et ce que vaut un robots.txt écrit sans mesure. - [La release qui ne comptait plus](https://lecodeestdanslepre.fr/markdown/billets/release-automatisee-git-cliff-github-actions.md): Automatisez vos releases de 0 à 1 avec Conventional Commits, git-cliff et SemVer. Simplifiez votre workflow DevOps pour un déploiement d'application. - [Core Web Vitals : mécanique de mesure et pièges à éviter](https://lecodeestdanslepre.fr/markdown/billets/core-web-vitals-mecanique-pieges.md): D'où viennent les chiffres des Core Web Vitals : ce que CrUX voit (et rate), pourquoi Lighthouse ne prédit rien, et les pièges LCP, INP, CLS à éviter. - [AI Overviews arrive en France : faut-il vraiment optimiser ?](https://lecodeestdanslepre.fr/markdown/billets/optimiser-pour-les-ia-qui-repondent.md): Google AI Overviews arrive en France. Faut-il optimiser votre stratégie SEO pour être cité ? Décryptage des enjeux et des réglages techniques. - [Créer un serveur MCP avec Symfony](https://lecodeestdanslepre.fr/markdown/billets/symfony-mcp.md): Configurez un serveur MCP sous Symfony pour exposer vos outils à des agents IA. Apprenez la configuration, les attributs, et évitez les pièges. - [Symfony 8.1 HTTP-less : pour un projet neuf, pas pour un worker existant](https://lecodeestdanslepre.fr/markdown/billets/symfony-8-1-http-less-pour-un-projet-neuf-pas-pour-un-worker-existant.md): Le kernel HTTP-less de Symfony 8.1 sert un projet neuf, pas à alléger un worker existant. ServicesBundle, ConsoleBundle, RequiredBundle : pour quel cas. - [Igor PHP : voir ce que PHPStan ne voit pas en worker mode](https://lecodeestdanslepre.fr/markdown/billets/igor-php-worker-mode.md): Igor PHP repère les fuites d'état que PHPStan ne voit pas en FrankenPHP worker mode. Premier scan de ce blog : 269 findings bruts, 3 vrais bugs. - [Vibe coding : le crash dont vous êtes le héros](https://lecodeestdanslepre.fr/markdown/billets/vibe-coding-erreur-ia.md): Un vendredi, un assistant un peu trop serviable, et deux jauges qui ne disent pas la même chose. Une partie de vibe coding dont vous êtes le héros. - [L'IA générative joue-t-elle au magicien d'Oz ?](https://lecodeestdanslepre.fr/markdown/billets/ia-generative-magicien-oz.md): L'IA générative livre-t-elle des miracles ou cache-t-elle des opérateurs ? Cet article décortique la réalité des avancées d'AlphaFold, GenCast, Copilot et les illusions marketing. - [La sobriété, c'est un métier du « ne pas »](https://lecodeestdanslepre.fr/markdown/billets/sobriete-numerique-developpeur.md): L'empreinte numérique des développeurs est-elle problématique ? Découvrez les 3 leviers d'action concrets pour une écoconception logicielle efficace et souvent gratuite. - [Vibe coding : le garde-fou n'est pas là où on l'a mis](https://lecodeestdanslepre.fr/markdown/billets/vibe-coding-garde-fou.md): Trois ratés d'IA en 2025-2026 (BMW, Starbucks, boutique) montrent que le code est bon, mais la délégation de décision en production manque de garde-fou humain. - [Une IA a trouvé les failles que ma QA ne voyait plus](https://lecodeestdanslepre.fr/markdown/billets/une-ia-a-trouve-les-failles-que-ma-qa-ne-voyait-plus.md): Une IA a détecté des failles de sécurité critiques (IDOR, exécution de code arbitraire) dans une application Symfony, là où la QA humaine ne voyait plus rien. Comment ce piège fonctionne. - [EasyAdmin : quand un seul trait configure trois CRUDs](https://lecodeestdanslepre.fr/markdown/billets/easyadmin-quand-un-seul-trait-configure-quatre-cruds.md): Simplifiez vos CRUDs Symfony avec EasyAdmin. Utilisez un trait pour partager des champs communs entre entités et améliorez la maintenance de votre code. - [FrankenPHP en dev : un worker chaud, trois --watch empilés, et un cert qui ne demande rien](https://lecodeestdanslepre.fr/markdown/billets/frankenphp-en-dev-un-worker-chaud-trois-watch-empiles-et-un-cert-qui-ne-demande-rien.md): FrankenPHP : 3 hot reloads empilés (worker, Tailwind, PHP) dans un binaire avec Caddy et HTTPS natif. Développement sans configuration complexe. - [jakzal/phpqa : sortir la QA Symfony de son vendor/](https://lecodeestdanslepre.fr/markdown/billets/jakzal-phpqa-sortir-la-qa-symfony-de-son-vendor.md): Exclure les outils de QA Symfony (PHPStan, Rector, CS-Fixer) du vendor Composer grâce à jakzal/phpqa et Docker. Reproduisez votre environnement. - [Symfony 8.1 : vos Commands passent en mode Controller](https://lecodeestdanslepre.fr/markdown/billets/symfony-8-1-vos-commands-passent-en-mode-controller.md): Symfony 8.1 intègre les value resolvers Doctrine (MapEntity, Uid, DateTime) pour vos commands. Simplifiez vos signatures __invoke() comme en Controller. - [FrankenPHP en prod : un binaire, quatre sous-domaines, un seul worker](https://lecodeestdanslepre.fr/markdown/billets/frankenphp-en-prod-un-binaire-quatre-sous-domaines-un-seul-worker.md): FrankenPHP intègre Caddy pour remplacer Nginx et PHP-FPM. Nous démontons la stack Docker pour servir 4 sous-domaines avec un worker Symfony. - [Symfony Scheduler en prod : j'ai attendu d'avoir Redis pour migrer, et j'ai bien fait](https://lecodeestdanslepre.fr/markdown/billets/symfony-scheduler-en-prod-j-ai-attendu-d-avoir-redis-pour-migrer-et-j-ai-bien-fait.md): Migration de Cron vers Symfony Scheduler : 3 briques essentielles (worker Messenger, Redis, transport async) pour une exécution fiable en production. - [EasyAdmin : son premier CrudController](https://lecodeestdanslepre.fr/markdown/billets/easyadmin-son-premier-crudcontroller.md): Dès votre premier CrudController avec EasyAdmin et Symfony, prenez les bonnes habitudes. Cet article détaille la création sur l'entité simple RedirectRule. - [PHP 8.6 : ce qui est acté, ce qui se joue encore](https://lecodeestdanslepre.fr/markdown/billets/php-8-6-ce-qui-est-dans-le-pot-ce-qui-se-joue-encore.md): Découvrez ce qui est confirmé et ce qui se joue encore pour PHP 8.6 : analyse complète des nouvelles fonctionnalités et RFC en cours de vote. - [CrowdSec : la défense réseau communautaire expliquée](https://lecodeestdanslepre.fr/markdown/billets/crowdsec-la-defense-reseau-communautaire-expliquee.md): CrowdSec est une défense réseau communautaire : les bans sont partagés et validés collectivement. Découvrez sa mécanique et comment il surpasse les limites de Fail2ban. - [EasyAdmin : construire un menu admin qui tient la route](https://lecodeestdanslepre.fr/markdown/billets/easyadmin-construire-un-menu-admin-qui-tient-la-route.md): Un menu EasyAdmin qui tient la route : configureMenuItems(), MenuItem, rôles et sections pour un back-office Symfony navigable. Retour d'expérience complet. - [Une boucle for contre 11,7 millions de Français : autopsie d'une faille IDOR](https://lecodeestdanslepre.fr/markdown/billets/une-boucle-for-contre-11-7-millions-de-francais-autopsie-d-une-faille-idor.md): Décryptage de la faille IDOR qui a exposé 11,7 millions de comptes ANTS en 2026. Apprenez comment Symfony prévient ce type de vulnérabilité. - [Symfony AI Mate : un troisième port d'entrée pour votre app Symfony](https://lecodeestdanslepre.fr/markdown/billets/symfony-ai-mate-un-troisieme-port-d-entree-pour-votre-app-symfony.md): Symfony AI Mate ajoute un port JSON-RPC à votre app Symfony, exposant votre container DI et services aux agents via stdio. Installation en 3 lignes. - [C'est parti pour installer EasyAdmin](https://lecodeestdanslepre.fr/markdown/billets/c-est-parti-pour-installer-easyadmin.md): EasyAdmin Symfony est la solution idéale pour un back-office léger. Installez-le rapidement en suivant ce guide et gérez efficacement vos entités Doctrine. - [Héritage Doctrine : la troisième porte que personne ne montre](https://lecodeestdanslepre.fr/markdown/billets/heritage-doctrine-la-troisieme-porte-que-personne-ne-montre.md): Doctrine présente 3 stratégies d'héritage ORM : STI, CTI et Mapped Superclass. Découvrez cette 3e option souvent oubliée pour vos entités complexes. - [Fibers PHP : anatomie d'une primitive mal aimée](https://lecodeestdanslepre.fr/markdown/billets/fibers-php-anatomie-d-une-primitive-mal-aimee.md): Les Fibers PHP, bien que peu utilisées directement, sont le moteur des bibliothèques async modernes comme Amphp. Découvrez leur fonctionnement bas niveau. - [Générer son SEO avec Symfony AI et Gemini](https://lecodeestdanslepre.fr/markdown/billets/generer-son-seo-avec-symfony-ai-et-gemini.md): Intégrez la génération SEO automatique avec Google Gemini via Symfony AI dans votre administration EasyAdmin. Optimisez vos métadonnées facilement. - [Redirections HTTP avec Symfony : de la règle au nettoyage mensuel](https://lecodeestdanslepre.fr/markdown/billets/construire-un-systeme-de-redirections-http-complet-avec-symfony.md): Redirections HTTP avec Symfony : entité RedirectRule, listener kernel.request, cache Redis, validation anti-ReDoS, création automatique au changement de slug et purge mensuelle. - [Recommandations de contenu avec Meilisearch](https://lecodeestdanslepre.fr/markdown/billets/recommandations-de-contenu-avec-meilisearch.md): Meilisearch appelle lui-même le fournisseur d'embeddings au push. Ce que ça change, ce que /similar sait faire, et pourquoi il faut quand même un repli. - [Comment j'ai transformé EasyAdmin en tableur intelligent](https://lecodeestdanslepre.fr/markdown/billets/comment-j-ai-transforme-easyadmin-en-tableur-intelligent.md): Transformez EasyAdmin en tableur intelligent ! Six décisions UX ciblées améliorent votre quotidien sans code ni outils externes. Découvrez comment. - [Les délimiteurs Twig : ce problème d'espace blanc que vous ignorez](https://lecodeestdanslepre.fr/markdown/billets/les-delimiteurs-twig-le-probleme-d-espace-blanc-que-personne-ne-maitrise-vraiment.md): Les délimiteurs Twig ({% %}, {{ }}, {# #}) génèrent des espaces blancs inattendus. Découvrez comment les maîtriser pour un code source HTML stable et léger. - [PHP 8.4 : rattrapage de retard ou véritable modernisation ?](https://lecodeestdanslepre.fr/markdown/billets/php-8-4-rattrapage-modernisation.md): PHP 8.4 introduit les property hooks, la visibilité asymétrique, et des fonctions de tableau. Analyse de leur adoption et impact réel sur les projets. - [PHP 8.5 : pipe operator et nouvelles fonctionnalités](https://lecodeestdanslepre.fr/markdown/billets/php-8-5-pipe-operator-et-nouvelles-fonctionnalites.md): PHP 8.5 introduit le pipe operator, array_first(), array_last() et l'attribut NoDiscard. Découvrez les nouveautés qui modernisent le langage. - [PHP 8.3 : typage renforcé et nouvelles fonctionnalités](https://lecodeestdanslepre.fr/markdown/billets/php-8-3-le-renforcement-du-typage-renforce-et-coherence-du-langage.md): PHP 8.3 améliore la rigueur avec le typage des constantes et json_validate(). Découvrez ces nouveautés pour sécuriser et optimiser votre code PHP. - [PHP 8.2 : la consolidation du système de types et modernisation de l’API](https://lecodeestdanslepre.fr/markdown/billets/php-8-2-readonly-classes.md): PHP 8.2 a introduit les classes readonly, une avancée majeure pour la consolidation du typage en PHP. Découvrez son impact sur la fiabilité des applications. - [Comment tailwind_merge résout les conflits de classes dans Twig](https://lecodeestdanslepre.fr/markdown/billets/comment-tailwind-merge-resout-les-conflits-de-classes-dans-twig.md): Le filtre tailwind_merge résout les conflits de classes Tailwind CSS dans Twig, simplifiant le développement de vos composants réutilisables. - [PHP 8.1 : l’expression après la révolution](https://lecodeestdanslepre.fr/markdown/billets/php-8-1-readonly-impact.md): Découvrez comment 'readonly' de PHP 8.1 renforce les architectures PHP modernes, malgré la fin de sa maintenance. Un outil essentiel pour la robustesse. - [PHP 8.0 : la révolution qui a tout changé](https://lecodeestdanslepre.fr/markdown/billets/php-8-0-attributs-proprietes-promues.md): PHP 8 : les attributs et propriétés promues ont révolutionné le code. Analyse des vrais impacts cinq ans plus tard sur le développement PHP. - [Ce qui se passe entre la barre de recherche et l'index](https://lecodeestdanslepre.fr/markdown/billets/meilisearch-l-art-de-la-recherche-instantanee.md): De la frappe au résultat : LiveComponent, index Meilisearch, indexation asynchrone et tokenisation. La chaîne réelle d'une recherche sur ce blog. - [OWASP ZAP : comment implémenter un audit DAST automatisé avec Symfony et Docker](https://lecodeestdanslepre.fr/markdown/billets/owasp-zap-comment-implementer-un-audit-dast-automatise-avec-symfony-et-docker.md): Auditez la sécurité de votre application Symfony avec OWASP ZAP, Docker et le réseau. Apprenez à automatiser vos scans pour des tests reproductibles. - [Le FOUC n'est pas un bug graphique, c'est une faille d'architecture !](https://lecodeestdanslepre.fr/markdown/billets/le-fouc-n-est-pas-un-bug-graphique-c-est-une-faille-d-architecture.md): Le FOUC n'est pas un bug visuel, mais une faille d'architecture frontend qui brise la confiance utilisateur et pénalise votre SEO. Éradiquez-le. - [Symfony UX Icons : 200 000 icônes SVG sans CDN, sans sprite, sans prise de tête](https://lecodeestdanslepre.fr/markdown/billets/symfony-ux-icons-200-000-icones-svg-sans-cdn-sans-sprite-sans-prise-de-tete.md): Symfony UX Icons intègre 200 000+ icônes SVG via Iconify, sans CDN ni sprite. Installation et usage en une ligne Twig pour une UX sans prise de tête. - [Symfony UX Toolkit : quand le frontend devient (enfin) un plaisir](https://lecodeestdanslepre.fr/markdown/billets/symfony-ux-toolkit-quand-le-frontend-devient-enfin-un-plaisir.md): Symfony UX Toolkit révolutionne la DX avec des composants UI inspirés de shadcn/ui. Maîtrisez vos vues Twig et Stimulus pour un frontend enfin agréable. - [Castor : un task runner en PHP pour les projets Symfony](https://lecodeestdanslepre.fr/markdown/billets/castor-un-task-runner-en-php-pour-les-projets-symfony.md): Tutoriel Castor : installer le binaire, écrire ses tâches, organiser .castor/, paralléliser la QA et migrer un Makefile sans casser ses hooks git. - [Comment FrankenPHP a relégué PHP-FPM et Nginx au stade de reliques](https://lecodeestdanslepre.fr/markdown/billets/comment-frankenphp-a-relegue-php-fpm-et-nginx-au-stade-de-reliques.md): FrankenPHP avec Docker optimise votre stack DevOps : remplacez Nginx et PHP-FPM pour une architecture prod, parité dev/prod et performances accrues. - [AssetMapper : le frontend de Symfony sans Node ni bundler](https://lecodeestdanslepre.fr/markdown/billets/assetmapper-le-frontend-pour-ceux-qui-detestent-vraiment-le-frontend.md): AssetMapper Symfony sert le frontend sans Node ni bundler : import maps natives, importmap.php et zéro build. Le composant qui fait tourner ce blog. - [Live Components : JavaScript, moi non plus](https://lecodeestdanslepre.fr/markdown/billets/live-components-javascript-moi-non-plus.md): Les Live Components Symfony rendent une interface réactive sans écrire de JavaScript : re-rendu serveur via AJAX, data-model et LiveProps, en Twig. - [Twig Components : la puissance du Backend dans le Frontend](https://lecodeestdanslepre.fr/markdown/billets/twig-components-la-puissance-du-backend-dans-le-frontend.md): Les Twig Components remplacent macros Twig et includes : classes PHP typées, props et logique encapsulée. La brique de base des interfaces Symfony UX. - [PHP 8.4 Property Hooks : quand Doctrine 3.4 dépoussière vos getters/setters](https://lecodeestdanslepre.fr/markdown/billets/php-8-4-property-hooks-quand-doctrine-3-4-revolutionne-vos-getters-setters.md): Les property hooks de PHP 8.4 remplacent getters et setters : get/set portés par la propriété, entités plus courtes, support Doctrine enfin utilisable. - [Sécurité & 2FA : la forteresse numérique](https://lecodeestdanslepre.fr/markdown/billets/securite-2fa-la-forteresse-numerique.md): Sécurisez votre application Symfony avec la double authentification 2FA grâce à SchebTwoFactorBundle et PHP 8.4 pour une protection robuste. - [Les DTOs : arrêtez de transformer vos données en kebab](https://lecodeestdanslepre.fr/markdown/billets/les-dtos-arretez-de-transformer-vos-donnees-en-kebab.md): Les tableaux associatifs PHP sont une source de bugs. Le DTO est l'antidote : un contrat pour vos données. Découvrez comment PHP 8 rend les DTOs élégants. - [Attributs PHP : la moitié qu'on oublie d'écrire](https://lecodeestdanslepre.fr/markdown/billets/attributs-php-moities.md): Découvrez les attributs PHP : déclaration et interprétation. Cet article compare cette nouveauté aux anciennes annotations et détaille leur fonctionnement. - [L'injection de dépendance, ou comment être fainéant avec élégance](https://lecodeestdanslepre.fr/markdown/billets/linjection-de-dependance-ou-comment-etre-faineant-avec-elegance.md): Autowiring, services tagués, #[Required] : ce que le container Symfony fabrique à votre place, et ce que ça coûte quand le process ne meurt plus entre deux requêtes. - [Les design patterns supposent que le process va mourir](https://lecodeestdanslepre.fr/markdown/billets/design-patterns-en-php-les-heros-de-l-ombre.md): Les design patterns PHP supposent un process qui meurt à la fin de la requête. FrankenPHP en worker mode supprime cette garantie. Cinq patterns au banc d'essai. - [Arrêtez les God Controllers, passez à l'ADR](https://lecodeestdanslepre.fr/markdown/billets/arretez-les-god-controllers-passez-a-l-adr.md): Le pattern ADR décompose les requêtes HTTP en 3 rôles : Action, Domain, Responder. Il évite les God Controllers et améliore la maintenabilité. - [MVC : comment séparer proprement ce qu'on va de toute façon mélanger ensuite](https://lecodeestdanslepre.fr/markdown/billets/mvc-comment-separer-proprement-ce-quon-va-de-toute-facon-melanger-ensuite.md): Symfony : évitez le chaos du pattern MVC mal appliqué. Découvrez où placer la logique métier pour un code propre et maintenable, loin des exemples scolaires. - [Composer : le manifeste du développeur moderne](https://lecodeestdanslepre.fr/markdown/billets/composer-le-manifeste-du-developpeur-moderne.md): Composer, l'outil PHP essentiel pour gérer les dépendances. Comprenez son modèle mental : composer.json, composer.lock et le dossier vendor. - [Anatomie d’un projet Symfony](https://lecodeestdanslepre.fr/markdown/billets/anatomie-dun-projet-symfony.md): Analysez les dossiers d'un projet Symfony (bin, config, public, src, var) pour mieux organiser votre code et résoudre vos problèmes techniques. - [CSP : le gilet pare-balles de votre site web](https://lecodeestdanslepre.fr/markdown/billets/csp-le-gilet-pare-balles-de-votre-site-web.md): La CSP en production : retour d'expérience après application sur un site web. Les limites des allow-lists et la puissance des nonces pour sécuriser votre site. - [Les tests : comment bien jouer au Cluedo](https://lecodeestdanslepre.fr/markdown/billets/les-tests-comment-bien-jouer-au-cluedo.md): Enquêtez sur vos bugs : tests unitaires, fonctionnels, mutation, et tests JS. Apprenez à traquer les coupables dans votre code avec des exemples concrets. - [Docker et les containers : parce qu'il faut expliquer avec des pancakes](https://lecodeestdanslepre.fr/markdown/billets/docker-et-les-containers-parce-quil-faut-expliquer-avec-des-pancakes.md): Comprendre Docker et les conteneurs grâce à une analogie simple avec des pancakes. Apprenez les concepts d'image, conteneur, volume et réseau.