Ce template opinionated et prêt pour la production simplifie le démarrage d’un projet PHP en intégrant Symfony 8, SvelteKit 2 (avec Svelte 5), PostgreSQL 17 et une stack d’outils qualité (PHPStan niveau max, 10 extensions dont phpstan-symfony, phpstan-doctrine et phpat pour les tests d’architecture). L’architecture Same-Origin (via Caddy) évite les complexités CORS et simplifie l’authentification. Infrastructure gérée par OpenTofu sur Hetzner. Idéal pour les petits projets ou équipes solo.
Découvrez comment Symfony simplifie la gestion du temps dans vos applications avec son composant Clock, basé sur la norme PSR-20. L'article explique pourquoi l'accès direct au temps système (new \DateTimeImmutable()) crée des dépendances implicites difficiles à tester, et propose une solution en injectant le temps comme une dépendance explicite via ClockInterface. Un exemple concret avec un service de génération de tokens illustre comment rendre votre code plus robuste et testable. Une lecture utile pour améliorer la maintenabilité de vos projets Symfony ! 🕒
Découvrez comment implémenter une gestion robuste des passkeys et un système de récupération de compte dans Symfony avec WebAuthn. Cet article explique comment créer un tableau de bord utilisateur pour gérer ses clés d'accès (affichage, révocation), générer des codes de récupération uniques et sécurisés, et intégrer ces fonctionnalités via des événements Symfony et Doctrine. Une solution clé pour éviter les failles liées aux liens magiques par email tout en maintenant une expérience utilisateur fluide. Parfait pour renforcer la sécurité d'une application Symfony !
L'auteur partage son expérience de création d'une application de suivi d'habitudes (SmartHabit Tracker) en partant d'un template Symfony/SvelteKit préconfiguré. Le projet met en avant une approche statistique (algorithme MAD) pour des notifications intelligentes, adaptées aux habitudes réelles des utilisateurs, et une synchronisation en temps réel via Mercure. L'architecture évite Firebase au profit de solutions open source (Web Push, ntfy, APNs), avec une attention particulière portée aux tests (PHPStan, mutation testing) et à la scalabilité. Un exemple concret de l'importance des bonnes pratiques dès la conception.
Découvrez comment l'équipe de Benoit Leveque a intégré leur wiki BookStack à des assistants IA (Claude, Cursor) via un serveur MCP basé sur Symfony (symfony/mcp-bundle). L'enjeu ? Permettre aux IA d'accéder directement à la documentation interne tout en conservant une traçabilité précise des actions (qui a modifié quoi). Leur solution évite l'écueil d'un jeton API partagé (qui fausserait les logs) en faisant transiter les identifiants utilisateurs via des en-têtes HTTP dans la configuration MCP. Un exemple concret de l'intérêt du protocole MCP pour l'intégration sécurisée et contextuelle des outils d'IA.
JoliCode explique comment ils ont modernisé une application Symfony 7.4 (avec PHP 8.4 et FrankenPHP) pour l'archéologie, en permettant un déploiement hybride : SaaS en ligne et On-Premise (OP) hors réseau. Leur solution repose sur une stack Docker unifiée (mêmes images pour tous les environnements), pilotée par des tâches Castor pour simplifier le développement local. L'article détaille l'architecture Docker, l'automatisation des builds et le déploiement OP, avec des feature flags via variables d'environnement. Une approche pragmatique pour concilier flexibilité et contraintes métiers.
L'article explore les limites des tâches planifiées via cron dans les applications Symfony et propose une migration vers Symfony Scheduler pour une gestion plus fiable des jobs. Il décrit comment passer d'une commande cron basique à une solution intégrée utilisant Messenger, des verrous (locks) et une gestion d'état, permettant ainsi de gérer les retries, l'idempotence et la continuité des processus métiers. L'auteur souligne que cette approche, bien que plus complexe, offre une meilleure intégration et une responsabilité accrue de la gestion du temps au sein de l'application.
Ce guide explique comment implémenter une authentification sans mot de passe dans Symfony 7.4 en utilisant les passkeys basés sur les standards WebAuthn et FIDO2. Les passkeys remplacent les mots de passe par des paires de clés cryptographiques, stockant la clé privée sur l'appareil de l'utilisateur et la clé publique sur le serveur. L'article détaille l'architecture nécessaire, les dépendances à installer, et les entités à créer pour gérer les utilisateurs et leurs passkeys, éliminant ainsi complètement les mots de passe de l'application.
Marcel Moll partage son expérience avec Symfony Messenger, soulignant des aspects non couverts par la documentation. Il aborde des problèmes rencontrés avec une application e-commerce sous forte charge, comme la gestion de la mémoire, les stratégies de réessai, et la configuration des transports. Il insiste sur l'importance de la version des classes de messages pour éviter les échecs de désérialisation, et recommande des bonnes pratiques pour les déploiements et la gestion des files d'attente. Un guide pratique pour les développeurs expérimentés avec Symfony.
L’article explique comment utiliser le même pool de cache Symfony à la fois dans un contrôleur et dans Twig afin d’éviter de recalculer plusieurs fois les mêmes données. L’idée consiste à injecter le même service de cache (par exemple cache.app) dans le contrôleur pour stocker ou récupérer des données coûteuses, puis à l’utiliser également dans Twig via l’extension de cache pour mettre en cache un fragment de template avec la même clé ou les mêmes tags. Cette approche permet de centraliser la logique de cache, de partager les données mises en cache entre backend et rendu Twig, et de faciliter l’invalidation (par exemple via des tags) lorsque les données changent.
L’article explique comment améliorer les performances d’une application Symfony en envoyant les journaux d’audit de manière asynchrone plutôt que synchronisée : dans une approche classique, chaque opération Doctrine déclenche la génération et l’insertion immédiate d’un audit log en base de données, ce qui peut fortement ralentir les requêtes (par exemple en passant d’environ 10 ms à 30–50 ms avec une base distante). La solution proposée consiste à utiliser Symfony Messenger et AuditTrailBundle pour sérialiser les informations d’audit dans un message envoyé vers une file (RabbitMQ, Redis ou Doctrine), puis traité par un worker en arrière-plan qui écrit le log en base, ce qui découple la logique métier des contraintes de conformité et réduit quasiment à zéro l’impact sur le temps de réponse de l’application.
Pour les applications utilisant le composant Symfony Intl, certains territoires comme le Kosovo ne sont pas inclus par défaut car leur code pays (XK) n’est pas un code officiel ISO 3166 mais un code “user-assigned”. Par conséquent, des appels comme Countries::getNames() ou Countries::getName('XK') ne retournent rien ou déclenchent une erreur. Il suffit d’activer la variable d’environnement SYMFONY_INTL_WITH_USER_ASSIGNED=true pour que Symfony reconnaisse ces codes non officiels, permettant alors d’obtenir correctement les codes alpha-2 (XK), alpha-3 (XKK) et le code numérique 983 pour le Kosovo.
La décoration de services dans Symfony est présentée comme un levier architectural puissant mais souvent sous-utilisé, permettant d’étendre ou modifier le comportement d’un service existant sans changer son implémentation ni casser les dépendances, en enveloppant ce service dans un décorateur qui appelle l’original puis ajoute une logique supplémentaire. Cette approche facilite la séparation des responsabilités et l’évolution du code dans les projets matures, par exemple pour ajouter du logging, du caching ou des règles métier sans alourdir le service initial. L’article insiste sur le fait que cette technique permet de maintenir des services simples et modulaires tout en composant progressivement des comportements plus riches, notamment grâce à la possibilité d’empiler plusieurs décorateurs autour d’un même service.
L’article explique comment créer des commandes console puissantes dans Symfony pour automatiser des tâches comme les imports, les scripts de maintenance ou les opérations administratives, en utilisant le composant Symfony Console qui permet de définir des commandes exécutables via php bin/console. Il montre notamment comment structurer une commande en classe avec un nom, une description, des arguments et des options, puis implémenter la logique dans la méthode d’exécution, tout en utilisant les outils du framework pour gérer l’interaction utilisateur, afficher des messages et organiser proprement le flux d’exécution.
L’article explique qu’une application qui récupère des URLs fournies par des utilisateurs (pour des aperçus de liens, webhooks ou flux RSS) peut être vulnérable à des attaques de type SSRF, où un attaquant force le serveur à accéder à des ressources internes comme 127.0.0.1 ou l’endpoint de métadonnées AWS. Pour appliquer facilement le principe de programmation défensive avec Symfony, il suffit d’envelopper le client HTTP existant avec un décorateur comme NoPrivateNetworkHttpClient, qui bloque automatiquement les requêtes vers les réseaux privés sans modifier le reste du code. Cette approche illustre comment Symfony HttpClient permet d’ajouter des protections de sécurité simples et réutilisables grâce à son architecture basée sur des décorateurs.
Ce tutoriel explique comment réaliser du web scraping avec une commande Symfony Console, une approche propre et adaptée à la production. L'auteur, Marvelous Akpotu, souligne que le scraping est une tâche longue, susceptible d'échouer, souvent planifiée et automatisée, ce qui en fait une tâche idéale pour les commandes Symfony Console. L'article détaille les étapes pour scraper des données de pays, les parser avec DomCrawler, les trier et les afficher dans un tableau CLI propre. Les packages nécessaires sont symfony/http-client, symfony/dom-crawler et symfony/css-selector. L'auteur met en avant les avantages de cette méthode, comme la séparation des préoccupations, la planification par cron, l'architecture propre, la réutilisabilité et la facilité de refactorisation en jobs asynchrones. Des conseils pour le scraping en production sont également fournis, comme le respect des conditions d'utilisation et du fichier robots.txt, et l'ajout de délais entre les requêtes. Le code source complet est disponible sur GitHub.
L’auteur explique comment optimiser Doctrine ORM pour éviter non seulement le problème classique du N+1, où l’accès aux relations dans une boucle génère des dizaines voire centaines de requêtes, mais aussi le piège du produit cartésien qui survient lorsqu’on tente de tout charger en une seule requête avec de nombreux LEFT JOIN : bien que n’affichant qu’une requête dans le profiler, ce type de jointures multiplie les lignes SQL retournées (chaque combinaison de collections), ralentit la page et surcharge Doctrine lors de l’hydratation des objets. La solution proposée repose sur une hydratation en plusieurs étapes en chargeant d’abord les entités principales avec une relation, puis en « primeant » séparément les autres relations via des requêtes successives utilisant l’Identity Map de Doctrine, ce qui aboutit à quelques requêtes légères et prévisibles sans explosion des résultats.
L’article explique comment configurer Claude Code, un outil CLI d’IA pour améliorer la productivité sur des projets Symfony et PHP, en insistant sur le fait que la qualité des résultats dépend surtout du bon paramétrage plutôt que du modèle utilisé : il conseille l’intégration de Claude Code dans l’IDE (par exemple via un plugin PhpStorm), la création d’un fichier AGENTS.md décrivant les conventions et règles de codage du projet pour guider l’IA, et l’usage systématique d’une phase de planification (“plan mode”) avant de générer du code afin d’obtenir des résultats précis et cohérents, tout en donnant des exemples pratiques de configuration et bonnes pratiques pour Symfony.
Ce tutoriel explique comment construire une application Symfony capable de gérer un grand volume de documents (jusqu'à un milliard) en utilisant MongoDB. Dans cette deuxième partie, l'auteur montre comment configurer une application Symfony avec le Doctrine MongoDB ODM pour mapper les documents à des classes PHP, et utiliser Symfony UX pour créer une interface utilisateur moderne. Le tutoriel couvre la configuration initiale de l'application, la cartographie des documents, et la mise en place d'un tableau de bord pour afficher des informations générales, une liste de stations, et des détails spécifiques comme les prix des carburants et leur historique.
Cet article explore les fonctionnalités avancées du composant EventDispatcher de Symfony, au-delà de son utilisation basique pour les notifications. Marcel Moll y partage des patterns qui peuvent transformer la structure d'une application, comme les événements stoppables, les priorités, les subscribers, et les points d'extension. Il aborde également les défis liés au traçage du code événementiel et quand il est approprié d'utiliser EventDispatcher. L'auteur partage son expérience et ses recommandations pour une utilisation efficace de cet outil puissant.