Skip to Content

Quiz 2 — Cœur & Doctrine

1. Par quel fichier unique entrent toutes les requêtes ?

Réponse

Le front controller public/index.php (seul dossier exposé au web).

2. Que prend et que renvoie HttpKernel::handle() ?

Réponse

Une Request en entrée, une Response en sortie.

3. À quoi sert l’événement kernel.terminate ?

Réponse

Exécuter des tâches après l’envoi de la réponse (logs lourds, e-mails) sans faire attendre le client.

4. Comment déclare-t-on une route en Symfony 7.4 ?

Réponse

Par un attribut #[Route(...)] (plus une annotation dans un commentaire).

5. Pourquoi ne jamais coder une URL en dur ?

Réponse

Un changement de chemin casserait les liens ; on génère par nom de route (path()/generateUrl()).

6. Que fait #[MapRequestPayload] ?

Réponse

Il désérialise + valide le corps JSON dans un DTO ; échec → 422 automatique.

7. Où doit vivre la logique métier ?

Réponse

Dans des services ; le contrôleur reste fin (lire, déléguer, répondre).

8. Qu’est-ce que l’autowiring ?

Réponse

L’injection automatique des dépendances par leur type (aucune config dans le cas courant).

9. Pourquoi injecter une interface plutôt qu’une classe concrète ?

Réponse

Pour le découplage et la testabilité (changer d’implémentation ou injecter un double sans modifier le code).

10. Un service est-il recréé à chaque injection ?

Réponse

Non : c’est un singleton (une instance partagée). D’où l’importance de services sans état.

11. Comment collecte-t-on une famille de services taggés ?

Réponse

Avec #[AutowireIterator('tag')] (ou un #[AutowireLocator] pour un chargement paresseux par clé).

12. Que découple l’EventDispatcher, et est-il synchrone ?

Réponse

« Il s’est passé X » de « réagir à X ». Synchrone ; pour du différé, Messenger.

13. Quel pattern de persistance Doctrine suit-il ?

Réponse

Data Mapper : l’entité est pure, l’EntityManager persiste (vs Active Record).

14. Différence entre persist() et flush() ?

Réponse

persist() planifie ; flush() exécute les opérations en attente (dans une transaction).

15. Dans une relation ManyToOne/OneToMany, quel côté est propriétaire ?

Réponse

Le ManyToOne (porte la FK, inversedBy). L’autre est inverse (mappedBy).

16. Pourquoi maintenir les deux côtés d’une relation ?

Réponse

Doctrine ne persiste que d’après le côté propriétaire ; les helpers addX/removeX synchronisent les deux.

17. Migrations ou fixtures pour le schéma ? Pour la démo ?

Réponse

Migrations pour le schéma, fixtures pour les données de démo/test.

18. Qu’est-ce que le N+1, et comment le corriger ?

Réponse

1 requête + N requêtes sur une relation paresseuse ; corrigé par fetch join (join + addSelect).

19. Comment éviter l’injection SQL avec Doctrine ?

Réponse

Toujours des paramètres nommés + setParameter(), jamais de concaténation.

20. Peut-on envoyer un e-mail dans un événement Doctrine (postPersist) ?

Réponse

À éviter : ça se produit pendant la transaction. On dispatche un événement de domaine après flush (ou Messenger).


Quiz suivant : Quiz 3 — Full-stack & sécurité.