Skip to Content
SymfonyPartie 16 — Annexes16.5 — Pièges & FAQ

16.5 — Pièges & FAQ

Les erreurs les plus fréquentes (surtout pour un dev venant de JS), regroupées.

Pièges de langage (dev JS → PHP)

PiègeCorrection
'a' + 'b' pour concaténer'a' . 'b' (le .)
===== (toujours strict)
$obj.prop$obj->prop
Class.method()Class::method()
${var} dans une chaîne"{$obj->prop}" ou "$var"
oublier $ devant les variablestoujours $var
closure sans usefunction () use ($x) {} (ou fn qui capture auto)
oublier declare(strict_types=1)en tête de chaque fichier
chercher du typage structurelPHP est nominal → implémenter l’interface
chercher async/awaitpas d’async : Messenger + workers

Pièges Symfony / framework

PiègeSolution
_meta.js liste un fichier inexistant (Nextra)ne lister que les pages existantes
cache dev « périmé » après un changement de configphp bin/console cache:clear
secret dans .env (committé).env.local ou coffre de secrets
déployer en APP_ENV=devtoujours prod + APP_DEBUG=0 en prod
EntityManager + logique dans le contrôleurcontrôleur fin → déléguer à un service
lier un formulaire à l’entité (mass assignment)passer par un DTO
flush() dans une boucleun seul flush() (ou par lots)
ne modifier qu’un côté d’une relationpasser par les helpers addX/removeX
collection non initialiséenew ArrayCollection() au constructeur
N+1 sur une listefetch join (join + addSelect)
CollectionType ne persiste pasby_reference: false
#[ApiResource] sans groupes (over-exposure)définir normalization/denormalizationContext
voter par item pour sécuriser une collectionextension Doctrine (filtre SQL)
état dans une propriété de service (worker mode)services sans état / ResetInterface
envoyer un e-mail dans un événement Doctrineévénement de domaine après flush, ou Messenger
confirmer un paiement sur la redirection Stripevia le webhook signé
allow_origin: '*' + credentials (CORS)origine exacte
stocker le JWT en localStorage (Next.js)cookie httpOnly posé côté serveur

FAQ

Symfony ou Laravel ? — Symfony pour la stabilité, l’explicite, les gros projets/API durables ; Laravel pour le prototypage rapide façon conventions. (1.4)

Faut-il connaître PHP avant Symfony ? — Oui, le PHP moderne (8+). C’est l’objet de la Partie 2 (obligatoire si vous êtes rouillé).

7.4 LTS ou 8.x ? — 7.4 LTS comme référence (support long) ; écrit sans dépréciations = code 8.x-ready. (1.2, ADR 0001)

AssetMapper ou Webpack Encore ? — AssetMapper par défaut (sans build) ; Encore pour les builds front complexes/legacy. (7.3)

Twig ou API + Next.js ? — Les deux : Twig/Symfony UX pour le back-office, API pour le front public Next.js. (8.4)

Comment faire du temps réel ? — Mercure (SSE), pas de WebSocket à gérer ; #[ApiResource(mercure: true)] ou #[Broadcast]. (12.5)

Comment migrer depuis Symfony 5 ? — LTS en LTS (5.4 → 6.4 → 7.4), avec Rector pour automatiser. (16.6)

Où héberger ? — Platform.sh/Upsun (PaaS Symfony) ou VPS + Docker/FrankenPHP. (15.4)

Comment tester une API protégée ? — ApiTestCase + JWT via /api/login_check, assertions JSON/schéma. (14.3)


Suivant : 16.6 — Migration Symfony 5 → 7.