Ce billet explique comment implémenter un système de génération automatique de métadonnées SEO (titres, descriptions, mots-clés) dans une administration EasyAdmin avec Symfony, en utilisant l'API Gemini via le bundle Symfony AI et Symfony Messenger pour gérer l'asynchrone. L'auteur détaille la configuration nécessaire, l'utilisation de Redis pour le transport des messages et le rate limiting pour protéger le quota de l'API Gemini. Le système permet aux rédacteurs d'accepter ou d'ignorer les suggestions générées automatiquement.
Ce partage explique l'importance de CORS (Cross-Origin Resource Sharing) pour sécuriser les sessions utilisateur sur les APIs web. Il décrit comment CORS agit comme un garde-fou en contrôlant l'accès aux ressources entre différents domaines, empêchant ainsi le vol de données via des requêtes cross-origin. L'article détaille les mécanismes de CORS, y compris les requêtes simples et les prévols (preflight), et fournit des exemples de configuration pour Symfony utilisant le NelmioCorsBundle, soulignant l'importance de la directive allow_credentials: true pour protéger les sessions utilisateur.
Cet article de Ihor Pal sur Medium explique le flux de traitement d'une requête HTTP dans une architecture propre (Clean Architecture). Il détaille comment une requête traverse les différentes couches (Domain, Use Cases, Interface Adapters, Frameworks) en montrant les structures de données échangées (DTOs, Entités, Value Objects) et l'orientation des dépendances. L'article illustre également la distinction entre les entités ORM et les entités de domaine, et met en lumière deux points clés d'inversion de dépendance. Un diagramme de flux complet et une structure de projet pratique en PHP/Symfony sont fournis pour clarifier le processus. L'objectif est de donner une vision dynamique de l'architecture propre, au-delà de la simple description statique des couches.
Ce billet explique comment construire un système de redirections HTTP complet avec Symfony, incluant des règles exactes et regex, un cache Redis, un suivi analytique asynchrone via Messenger, et une création automatique lors des changements de slugs. L'entité RedirectRule est au cœur du système, avec des validateurs personnalisés pour éviter les boucles et les patterns regex invalides. Des property hooks sont utilisés pour exposer des propriétés calculées sans getter.
AutoMapper 10.0 marque une avancée majeure avec une refonte technologique pour une performance optimale. Cette version intègre Symfony TypeInfo pour une extraction précise des métadonnées, permettant un mapping plus fiable. Elle introduit également le typage forcé via l'attribut #[MapTo] et supporte Symfony ObjectMapper, remplaçant le mécanisme par défaut par une solution générant du code PHP optimisé. La fonctionnalité de Nesting est également implémentée pour faciliter la manipulation de données imbriquées.
L'article explore l'importance de la mise en cache au niveau de l'application, en se concentrant sur les pools de cache, les tags et l'invalidation. À travers un projet Symfony réaliste, l'auteur montre comment introduire progressivement la mise en cache, identifier les problèmes en production et améliorer la conception du cache. Les exemples illustrent l'évolution de la mise en cache, en commençant par une approche naïve et en introduisant des techniques plus avancées comme les pools de cache dédiés et l'invalidation fine-grained à l'aide de tags. L'objectif est de montrer comment concevoir un cache fiable en production, en abordant les problèmes courants et les solutions applicables au-delà d'un seul framework.
Historique de versions dans EasyAdmin : capturer, comparer et restaurer chaque modification • Lecode
Cet article explique comment implémenter un système d'historique de versions dans EasyAdmin pour capturer, comparer et restaurer les modifications. Le système utilise Doctrine pour capturer automatiquement les changements, stocke des snapshots JSON complets des entités, et utilise jfcherng/php-diff pour afficher les différences visuellement. Il repose sur un LiveComponent Symfony UX pour l'interface utilisateur. La solution est conçue pour être simple à maintenir et à étendre, avec une seule table polymorphe pour stocker les versions de différents types de contenu.
Ce tutoriel explique comment appliquer la Clean Architecture à un projet Symfony, en utilisant PHP 8.4. L'auteur, Arthur Jacquemin, partage son expérience et ses exemples concrets pour aider les développeurs à comprendre et assimiler cette philosophie. Il insiste sur le fait que la Clean Architecture n'est pas un dogme, mais une approche flexible qui peut être adaptée selon les besoins du projet. Le tutoriel est destiné aux développeurs PHP familiarisés avec Symfony, mais le code présenté reste accessible. L'objectif est de transformer un mini-projet étape par étape vers une approche "clean", en protégeant le cœur métier et en le découplant des implémentations techniques.
Ce billet explique comment implémenter un système de recommandation d'articles sur un blog Symfony en utilisant Meilisearch comme moteur de similarité sémantique. L'auteur propose une solution simple et efficace basée sur la recherche full-text des titres des articles pour trouver des contenus similaires. L'architecture en trois niveaux de fallback garantit des suggestions pertinentes même en cas de défaillance du moteur de recherche. Le code PHP du service de navigation est fourni pour illustrer l'implémentation.
Ce billet explique comment améliorer l'interface utilisateur d'EasyAdmin en ajoutant une fonctionnalité d'édition inline pour divers types de champs (texte, enums, dates, associations) sans recharger la page. L'auteur utilise Symfony UX Turbo et Stimulus pour créer une expérience utilisateur plus fluide, similaire à un tableur. Le processus implique la création d'un contrôleur JavaScript pour gérer l'édition, la validation et l'annulation, ainsi qu'une action et un service PHP pour traiter les requêtes HTTP. L'architecture est détaillée et le code est fourni pour implémenter cette fonctionnalité.
Ce partage Shaarli présente un article de Medium expliquant comment construire rapidement un back-office avec Symfony en utilisant la Sylius Stack. L'auteur, Alexandre Buleté, décrit comment cette collection de composants Symfony permet de configurer une interface d'administration en quelques minutes, évitant ainsi de recréer des contrôleurs, des tableaux, des filtres et des modèles. L'article détaille la création d'une zone d'administration pour les utilisateurs, incluant une grille, des formulaires de création et d'édition, une page de visualisation, une entrée de menu et un pare-feu de connexion. La Sylius Stack offre une productivité accrue en permettant de décrire les écrans d'administration avec des métadonnées, tout en fournissant une interface d'administration générique. L'installation minimale inclut Doctrine, Asset Mapper, l'UI Bootstrap Admin et les traductions UI. L'article montre également comment créer une entité User en tant que Resource Sylius, en utilisant des annotations pour définir les opérations et les configurations nécessaires.
Cet article de Matt Mochalkin sur Medium explore l'utilisation des Property Hooks et de l'Asymmetric Visibility introduits avec PHP 8.4 et Symfony 7.4 pour moderniser les applications Symfony. Il montre comment ces nouvelles fonctionnalités permettent de supprimer les getters et setters boilerplate, tout en maintenant une bonne encapsulation et une intégration transparente avec Doctrine ORM, le Serializer, le Validator et les Forms de Symfony. L'auteur illustre ces concepts avec des exemples concrets de refactorisation d'entités Doctrine en entités modernes et concises.
Kevin Wenger explique dans cet article comment il a automatisé le découpage de panoramas 360° en tuiles pour son projet Respawwwn, un quiz de jeux vidéo. En utilisant Symfony et ImageMagick, il a réduit la taille initiale de chargement et le temps d'interaction de 80% en ne chargeant que les tuiles visibles à l'écran, comme le fait Google Maps. Il détaille la convention de nommage des tuiles et le code de la commande Symfony qui effectue le découpage.
Cet article explore les performances de Symfony 7.4 sur FrankenPHP, une nouvelle approche de serveur PHP qui intègre l'interpréteur PHP directement dans Caddy, éliminant ainsi les surcharges de FastCGI et les configurations complexes de Nginx. L'auteur compare la latence et le débit de cette configuration avec celle de PHP-FPM, montrant une réduction significative du temps de réponse (de 45ms à 8ms) grâce au mode Worker de FrankenPHP, qui maintient l'application en mémoire après le premier démarrage. Le tutoriel guide à travers la mise en place de cette configuration avec Docker, en détaillant les étapes pour construire une image Docker optimisée et configurer le serveur Caddy. Il aborde également les avantages de cette architecture moderne, comme le support natif de HTTP/3 et HTTPS automatique.
Ce billet explique comment intégrer Meilisearch à Symfony pour une recherche ultra-rapide et résiliente. L'auteur critique les solutions traditionnelles comme SQL LIKE, qui sont lentes et peu tolérantes aux erreurs, et les solutions tierces comme Google Programmable Search, qui posent des problèmes de confidentialité. Meilisearch, écrit en Rust, offre une solution performante et légère. L'article détaille l'implémentation d'une interface standardisée pour l'indexation des contenus et un service de recherche résilient qui bascule sur une solution SQL en cas de panne. Une lecture intéressante pour améliorer la recherche sur un site Symfony.
Ce billet explique comment sécuriser une application Symfony avec une double authentification (2FA) robuste en utilisant le bundle SchebTwoFactorBundle. L'auteur décrit une architecture sécurisée où le secret TOTP est géré côté backend, avec une implémentation stricte utilisant des classes anonymes en lecture seule pour encapsuler la configuration TOTP. Il met en avant l'importance de ne pas réinventer la crypto et de déléguer la gestion de la 2FA à une bibliothèque éprouvée pour éviter les failles d'implémentation. L'article détaille également la configuration du bundle et les bonnes pratiques à adopter pour une sécurité optimale.
Ce billet technique explore la transition des annotations vers les attributs PHP dans l'écosystème Symfony, soulignant les avantages des métadonnées natives introduites avec PHP 8. Les annotations, basées sur des commentaires DocBlocks, posaient des problèmes structurels comme l'absence de validation en temps réel, des performances médiocres et un refactoring risqué. Les attributs, en revanche, sont du code typé et performant, intégrés au langage et accessibles via la Reflection API. Symfony 8 utilise ces attributs pour simplifier l'injection de dépendances (Autowire), l'hydratation d'entités (MapEntity), la validation de payloads (MapRequestPayload) et la gestion de l'héritage (Override), réduisant ainsi la complexité du code et améliorant la maintenabilité.
AuditTrailBundle est un bundle léger pour Symfony qui suit et stocke automatiquement les modifications des entités Doctrine ORM pour la journalisation des audits et la conformité. Il offre des performances élevées grâce à une architecture en deux phases (capture en onFlush, envoi en postFlush), plusieurs options de transport (Doctrine, HTTP, Queue), un suivi précis des collections, un masquage des données sensibles, un support de réversion sécurisé, un audit conditionnel et un suivi contextuel riche. Compatible avec PHP 8.4+, Symfony 7.4+ et Doctrine ORM 3.0+, il est conçu pour les audits de production avec un faible overhead d'écriture et une prise en charge de la réversion des entités.
Cet article explique comment gérer et afficher des données massives dans une application Symfony en utilisant MongoDB. L'auteur, Andreas Braun, se base sur un dataset allemand de prix de carburant, qui change fréquemment et varie selon les villes. Le dataset comprend 78 Go de données de prix et près de 10 Go de données de stations, avec des fichiers organisés par année, mois et jour. L'article décrit comment inspecter les données, les importer dans MongoDB, et concevoir un schéma efficace pour travailler avec ce volume de données. La première partie se concentre sur l'inspection des données et la conception du schéma, tandis que la deuxième partie abordera la création d'une application Symfony pour afficher ces données.
Ce partage Shaarli présente le "DDD Symfony Bundle", un outil pour intégrer le Domain-Driven Design (DDD) dans Symfony. Ce bundle offre un noyau (Kernel) prêt pour le DDD, permettant une importation automatique des configurations des différents contextes délimités (Bounded Contexts), et une intégration avec Symfony Messenger pour gérer les commandes et les requêtes via des bus dédiés. Il facilite ainsi l'autonomie des contextes délimités et maintient une architecture propre et évolutive. Le bundle est disponible sur GitHub et peut être installé via Composer.