L'article explique comment standardiser la déclaration des droits avec une interface, implémenter cette interface sur les entités concernées, et créer un voter unique pour gérer les autorisations. Une solution efficace pour éviter la répétition de code et centraliser la logique d'accès, particulièrement utile dans les projets SaaS. L'article aborde également les améliorations possibles et les limitations de cette approche.
L’article explique comment éviter de coder en dur la logique métier dans un projet Symfony en utilisant le composant Symfony Expression Language pour rendre ces règles dynamiques et modifiables sans déploiement de code, en les stockant par exemple dans une base de données ; il décrit l’intérêt de cette approche face à des if/else classiques, présente la création d’une table de règles (action_policies) et un service qui évalue ces expressions dans un contexte donné (ex. utilisateur), tout en permettant d’ajouter des fonctions personnalisées pour étendre la logique.
Ce partage explique comment implémenter un système de signature d'URL pour la pagination dans Symfony 7. L'auteur, Pranan Subba, montre comment utiliser le service UriSigner pour signer les liens de pagination, empêchant ainsi toute manipulation des URLs. Le code fourni illustre comment vérifier l'intégrité des URLs et générer des liens signés pour la navigation. Une solution simple et efficace pour sécuriser les liens de pagination dans une application Symfony.
Dans cet article, l’auteur explique comment utiliser correctement le rate limiting dans des API Symfony en passant d’une simple limite unique à l’utilisation du Configurable Compound Rate Limiter de Symfony 7.3, qui permet de combiner plusieurs contraintes (par exemple une limite courte pour des pics d’activité et une limite longue pour éviter une charge soutenue) de manière déclarative dans la configuration plutôt que dans le code, avec pour bénéfices des en-têtes cohérents, une orchestration interne centralisée et une meilleure maintenabilité ; il détaille aussi comment externaliser l’application des limites via un event listener et des attributs pour garder les contrôleurs propres tout en soulignant les points d’attention (backend de stockage, surveillance des 429, etc.).
Cet article explique comment améliorer la gestion des permissions dans une application Symfony en utilisant les Voters, plutôt que des conditions if/else dans les contrôleurs. Les Voters permettent de centraliser et simplifier la logique de sécurité, en déléguant les vérifications d'accès à des classes spécialisées. L'auteur illustre cela avec un exemple concret de gestion des droits d'édition et de visualisation des posts dans un blog. Il montre comment créer et utiliser un Voter pour nettoyer et sécuriser le code des contrôleurs.
Ce guide explique étape par étape comment intégrer le système de paiement Dodo dans une application Symfony 7. Il couvre la création d'un compte Dodo, la configuration des produits, l'installation du SDK PHP, la gestion des variables d'environnement, la création des routes et services de paiement, ainsi que la gestion des retours après paiement. Le tutoriel est conçu pour être accessible aux débutants et met l'accent sur la simplicité et la clarté.
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.