Détails du sujet

Symfony 3 [Quiz 3] [Pile 5]

Services et Evénements dans le FrameWork Symfony 3

Toutes les cartes

Services

Quel est l'ID du service qui nous donne accés au noyau de Symfony et qui nous permet par exemple de localiser les bundles ou de récupérer le chemin de base du site?

kernel


Services

Quel est l'ID du service (son alias) qui nous donne accés au gestionnaire d'évènements de Symfony?

event_dispatcher


Services

Quel est l'ID du service qui gère les logs de notre application?

logger


Services

Quel est l'ID du service qui nous donne accés au moteur de template de Symfony?

templating


Services

Qu'est-ce qu'un tag?

Un tag est un petit mot que l'on appose à un ou plusieurs services afin que le conteneur de services les identifie comme tels.


Services

Les tags nous permettent-ils d'étendre les fonctionnalités des classes de base de Symfony sans en modifier le code?

Oui


Services

Quel est le tag et l'interface q'un service doit utiliser pour ajouter des extensions à Twig?

  • Le tag twig.extension
  • L'interface \Twig_extension

Services

A quoi cela sert-il de tager un service avec le tag twig_extension?

Cela permet à Twig de charger les services tagués avec twig_extension qui définissent des fonctions supplémentaires.


Services

Peut-on associer plusieurs tags à un service?

Oui


Services

Que doit faire le plus souvent un service tagué pour que son comportement soit reconnu par celui qui le récupère?

Le service doit le plus souvent mais pas toujours, implémenter une interface ou étendre une classe.

Ainsi celui qui récupère le service tagué va exécuter telle ou telle méthode de ce service.


Services

Quelle commande CLI (Commande Line Interface) nous permet de connaître tous les services tagués avec le tag 'twig.extension'?

>php bin/console debug:container --tag=twig.extension


Services

Citez quelques tags prédéfinis employés dans Symfony?

  • twig.extension
  • form.type
  • doctrine.event_listener
  • kernel.event_listener
  • validator.constraint_validator
  • etc...

Services

Quelles sont les étapes qui permettent d'étendre les fonctionnalités de base d'une classe X de Symfony avec un service tagué?

  • Créer une classe A avec une méthode B
  • Dans app/config/services.yml, on déclare la classe A comme service A et on le tague avec le tag approprié pour que la classe X de Symfony puisse la charger
  • Puis le plus souvent on fait en sorte que la classe A implémente une interface ou étende une classe et contienne une méthode que la classe X connait et exécutera.

Services

Quelle est l'utilité du tag form.type?

Permet la création de nos propre Type de champ de formulaire


Services

Quelle est l'utilité du tag twig.extension?

Permet d'enregistrer nos propres extensions Twig


Services

Qu'est-ce que les dépendances optionnelles?

Ce sont des dépendances qui sont ajoutées au service via un appel aux méthodes du service aprés l'exécution de son constructeur.


Services

Dans quel cas sommes-nous amenés à utiliser l'appel de méthode (setter injection) pour injecter une dépendance optionnelle à un service?

Quand on sait que la valeur de cette dépendance peut changer durant l'exécution de l'application.


Services - commentez ces lignes situées dans services.yml
Dépendances Optionnelles - Setter Injection - Appel de Méthode
  • Ligne 03: La classe Antispam est déclarée comme service
  • Ligne 02: Le nom du service est core.antispam
  • Ligne 04: On ajoute une dépendance optionnelle avec l'option calls
  • Ligne 05: La méthode setLocale de la classe nous permet de setter la variable locale

Services - Ces deux configurations sont-elles identiques?

Oui


Quel est le nom de l'éditeur de texte HTML WYSIWYG Open Source qui simplifie la création du contenu web?

Cet éditeur qui commence par 'CK' peut être utilisé pour transformer nos champs ''textarea'' de formulaires en WYSIWYG

CkEditor


Services - Commentez ces lignes
Un service tagué qui utilise un service pour fonctionner
  • La classe AntispamExtension est déclarée comme service, porte le nom oc_platform.twig.antispam_extension et utilise pour fonctionner le service oc_platform.antispam
  • Le service oc_platform.twig.antispam_extension sera chargé par Twig pour ajouter des extensions car il est tagé avec le tag twig.extension

Services - Commentez ces lignes
  • La classe CkeditorType est déclarée comme service et porte le nom oc_platform.form.ckeditor
  • Ce service sera chargé par le composant Form de Symfony pour ajouter notre propre Type de champ de formulaire car il est tagé avec le tag form.type
  • L'Alias ckeditor est utilisé pour  ce service

Services

Quel est l'ID du service qui permet notamment de récupérer l'utilisateur courant?

security.token_storage


Services

Est-il recommandé de connaître par coeur le noms des services les plus utilisés de Symfony?

Oui


Services

Citez les services les plus courants de Symfony

  • doctrine.orm.entity_manager
  • event_dispatcher
  • kernel
  • logger
  • mailer
  • request_stack
  • router
  • security.token_storage
  • twig
  • templating

Evénements

Qu'est-ce qu'un événement?

Un événement correspond à un moment clé durant l'exécution de l'application Symfony.


Evènement

Comment s'appel en français et en anglais un service qui écoute un événement?

  • Un écouteur
  • Un listener

Evénements

Quelles sont les étapes pour qu'un service devienne un écouteur et que le gestionnaire d'événement l'exécute quand l'événement survient?

  1. Les services qui souhaitent écouter tel événement se font connaître au gestionnaire d'événements pour devenir des écouteurs (listeners)
  2. Quand l'événement se produit le gestionnaire d'événement exécute les services écouteurs

Evénements

Quel est l'inconvenient d'ajouter une classe écouteuse au gestionnaire d'événements de la manière suivante?

$this->get('event_dispatcher')->addListener('kernel.response', array(NomClasse, 'MethodeDeLaClasse')

Il faut espérer que l'événement ne se soit pas produit avant que ce code s'exécute car on le raterait.

C'est la raison pour laquelle on n'enregistre rarement une classe écouteuse de cette manière


Evénéments

Que définir dans le fichier services.yml pour qu'une classe soit un service écouteur d'un événement du gestionnaire d'événement?

Dans le fichier services.yml on définit:
  1. Un nom de service pour notre classe
  2. Le FQCN de la classe
  3. Le Tag's name (le tag reconnu par le gestionnaire d'événements)
  4. Le Tag's event (l'événement déclencheur écouté)
  5. La Tag's method (méthode de la classe qui sera exécutée à l'événement)

Evénements - Commentez ces lignes situées dans services.yml
Un Service qui écoute un événement
  • On définit la classe BetaListener comme un service écouteur de l'événement kernel.response du gestionnaire d'événement kernel.event_listener
  • La méthode processBeta de ce service sera exécutée quand l'événement se produira

Evénements

Quelles sont les deux manières de présenter une classe écouteuse d'événements au gestionnaire d'événement?

  1. En manipulant le gestionnaire d'événement avec la méthode addListener (pas recommandé)
  2. En déclarant notre classe écouteuse comme un service lié à un événement du gestionnaire d'événement (recommandé)

Services

Un service = Plusieurs fonctions

ou

Un service = Une fonction

Un service = Une fonction


Evénements

Quand un événement se déclenche, quel argument est donné par le gestionnaire d'événements Kernel.event_listener à la classe écouteuse d'un de ses événements?

Une sous-classe de kernelEvent pour connaître l'état courrant

Evénements

Une classe écouteuse peut-elle décider si elle doit ou non lancer un service lors d'un événement et lui passer des arguments?

Oui


Evénements
  1. Quand est déclenché l'événement interne kernel.request?
  2. Dans quel cas peut-on l'utiliser?
  1. Au tout début de la distribution de la requête. Avant même que le choix du contrôleur à exécuter n'ai été fait.
  2. Quant on souhaite: (a) Retourner une réponse sans passer par un contrôleur (Utilisé pour renvoyer un template qui indique que le site est en maintenance); (b) Modifier la requête en y ajoutant un attribut ...

Evénements
  1. Quand est déclenché l'événement interne kernel.controller?
  2. Dans quel cas peut-on l'utiliser?
  1.  Quant le contrôleur correspondant à la requête est trouvé. (Le contrôleur n'a pas encore été exécuté)
  2. Quant on souhaite modifier un contrôleur

Vrai ou Faux

En développement, si on utilise le serveur interne de Symfony, pour lancer notre application on entre dans le browser localhost:8000 au lieu d'entrer localhost/NomDeNotreRépertoire/web/app_dev.php

Vrai


Evénements

Quand on établit une réponse pour l'événement kernel.view la propagation est stoppée.

 

Qu'est-ce que cela signifie?

Cela signifie que les écouteurs (listeners) avec une priorité moindre ne seront pas exécutés.


Evénements
  1. Quand est déclenché l'événement interne kernel.view?
  2. Dans quel cas peut-on l'utiliser?
  1. Quand un contrôleur ne retourne pas une réponse.
  2. (a) Pour construire une réponse au bon format (XML, JSON, HTML) à partir de ce que renvoit le contrôleur (s'il renvoit quelquechose). (b) Pour personnaliser l'erreur levée

Evénements
  1. Quand est déclenché l'événement interne kernel.response?
  2. Dans quel cas peut-on l'utiliser?
  1. Quand le contrôleur crée une réponse pour répondre à une requête. (La réponse n'est pas encore envoyée au client)
  2. On l'utilise pour modifier ou remplacer la réponse

Evénements
  1. Quand est déclenché l'événement interne kernel.exception?
  2. Dans quel cas peut-on l'utiliser?
  1. Quand une exception est levée. (L'exception n'est pas encore envoyée au client)
  2. On l'utilise pour modifier la réponse ou l'exception

Evénements
  1. Quand est déclenché l'événement interne security.interactive_login?
  2. Dans quel cas peut-on l'utiliser?
  1. Quand un utilisateur s'est authentifié correctement de manière active en entrant son username et password (pas avec un cookie, http basic, http digest ou la session)
  2. On l'utilise par exemple pour archiver une trace de l'authentification ou pour afficher un message flash de bienvenu.

Evénements
  1. Quand est déclenché l'événement interne security.authentication.success?
  2. Dans quel cas peut-on l'utiliser?
  1. Quand un utilisateur s'est authentifié quel que soit la manière (active ou non)
  2. On l'utilise par exemple pour archiver une trace de bonne authentification

Evénements
  1. Quand est déclenché l'événement interne security.authentication.failure?
  2. Dans quel cas peut-on l'utiliser?
  1. Quand un utilisateur échoue à s'authentifier quel que soit la manière (active ou non)
  2. On l'utilise par exemple pour archiver une trace de mauvaise authentification

Evénements

Citez quelques événements du ''kernel'' liés à la sécurité


Evénements

Lorsque l'on souhaite retourner au client une vue indiquant que notre site est en maintenance, qu'elle évenement du kernel utilise-t-on souvent pour faire cela?

kernel.request


Evénements

Losque l'on souhaite compter le nombre de mauvais login pour intedire ensuite l'accés au site, quel événement du ''kernel'' peut-on utiliser pour faire cela?

securiy.authentication.failure


Evénements

Peut-on créer nos propres événements?

Oui


Evénements

Peut-on définir l'ordre d'exécution des écouteurs (listeners)?

Oui