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.
Symfony UX Icons révolutionne la gestion des icônes dans Symfony en intégrant plus de 200 000 icônes SVG via Iconify, sans CDN, sans sprite et sans configuration complexe. Ce composant télécharge les icônes localement, les met en cache et les injecte directement dans le HTML, optimisant ainsi les performances et la maintenabilité. Avec une simple ligne de code Twig, vous pouvez utiliser des icônes de diverses collections comme Tabler, Lucide ou Material Design Icons. Installation via Composer et usage immédiat sans configuration supplémentaire.
Ce billet explique comment configurer Google Jules, une IA, pour automatiser les tâches de QA, sécurité et performance d'un projet Symfony avec Docker. L'auteur, ne pouvant consacrer beaucoup de temps à la maintenance, utilise Jules comme une équipe de support asynchrone. Il décrit le défi de rendre l'IA compatible avec Docker et partage un script Bash qui configure l'environnement pour que Jules puisse interagir avec la stack complexe (Docker, PostgreSQL, Redis, Meilisearch) sans compromettre l'intégrité du projet. Le script gère la détection dynamique du contexte, les permissions Git et Docker, et permet à Jules de piloter le daemon Docker de la machine hôte.
Cet article explique comment implémenter le pattern CQRS (Command Query Responsibility Segregation) avec Symfony Messenger pour structurer et simplifier le code des applications Symfony. Le CQRS sépare les opérations d'écriture (Commands) et de lecture (Queries), permettant une meilleure organisation, une séparation claire des responsabilités et une validation des données avant la logique métier. L'article détaille les étapes pour créer une application de gestion de bibliothèque, incluant la création d'une entité Book, d'un DTO, la configuration de Symfony Messenger, et l'implémentation des Commands et Queries avec leurs contrôleurs respectifs. Un prérequis est la connaissance de Symfony Messenger.
L'auteur explique la conception d'une architecture d'audit en deux phases pour Symfony, visant à concilier atomicité et performance. La première phase, transactionnelle (onFlush), capture les changements de données dans la base de données, garantissant ainsi la cohérence. La seconde phase, asynchrone (postFlush), envoie les logs d'audit vers des destinations externes sans impacter les performances de l'application. L'article détaille les avantages de cette approche et les choix architecturaux clés, comme l'utilisation de la méthode onFlush plutôt que des callbacks de cycle de vie.
Cet article explique comment gérer proprement les erreurs de validation dans Symfony. L'auteur souligne que, bien que Symfony offre des outils élégants pour la validation des requêtes via les DTOs et les attributs comme #[MapRequestPayload], la gestion des erreurs par défaut reste verbeuse et inconsistante. Il propose une solution propre et moderne en utilisant le bundle Symfony Validation Response, qui transforme automatiquement les erreurs de validation en réponses JSON cohérentes et faciles à consommer pour les clients frontend. L'installation est simple et ne nécessite aucune configuration supplémentaire. L'article inclut un exemple pratique de DTO avec validation et un contrôleur, montrant comment les erreurs sont automatiquement formatées en JSON.
Nacho Colomina explique comment Equillar a migré de SecretBox vers l'encryption AEAD (Authenticated Encryption with Associated Data) pour mieux protéger les données sensibles comme les clés privées des portefeuilles système. L'AEAD offre une authentification des données supplémentaires et lie le texte chiffré à son contexte, empêchant ainsi les attaques de contexte croisé. L'article détaille l'architecture mise en place, incluant des Schema Builders pour générer des données supplémentaires de manière cohérente et des services tagués pour une gestion scalable.
Ce billet explore l'utilisation pratique des Design Patterns en PHP et Symfony, en se concentrant sur des exemples concrets comme Factory, Observer et Facade. Il démystifie ces concepts souvent perçus comme théoriques et montre comment ils structurent et améliorent le code au quotidien. Par exemple, le pattern Factory simplifie la création d'objets complexes, tandis que le pattern Observer permet de découpler les actions déclenchées par des événements. Le billet illustre ces principes avec des extraits de code et des cas d'utilisation dans Symfony, offrant ainsi une compréhension claire et applicable de ces patterns.
Ce guide pratique explique comment créer des microservices hexagonaux performants en PHP avec Symfony et gRPC. Il détaille les avantages de gRPC, comme la communication efficace entre microservices grâce à un format binaire compact et le support de HTTP/2 pour le multiplexage et le streaming bidirectionnel. Le tutoriel couvre l'installation de Symfony avec Docker et Roadrunner, la configuration de Docker Compose, et l'implémentation d'un serveur gRPC avec RoadRunner. Il inclut également des étapes pour créer un projet Symfony, installer les dépendances nécessaires, et configurer un conteneur Docker avec PHP et Roadrunner. Enfin, il montre comment exécuter la première application Symfony via Roadrunner et commencer à implémenter un serveur gRPC.
Cet article explique comment résoudre un problème courant avec les Value Objects en tant qu'identifiants d'entités dans Symfony et Doctrine. L'auteur propose une solution pour éviter la répétition de classes de types DBAL personnalisés en implémentant un type générique DBAL qui supporte ces objets de valeur ID. Le post détaille les étapes pour créer une entité identifiée par un Value Object, résoudre les erreurs de mapping, et enregistrer un type DBAL personnalisé pour gérer ces identifiants de manière efficace.