Détails du sujet

Symfony 3 [Quiz 4] [Pile 1]

Evénements, Traduction dans le FrameWork Symfony 3

Toutes les cartes

Evénements

Quelles sont les étapes pour créer son propre événement et reproduire ainsi le comportement des événements de Symfony?

  1. Définir le nom de notre événement
  2. Construire la classe de l'événement en définisant les informations que l'on souhaite échanger entre elle et la classe écouteuse
  3. Déclencher l'événement

Evénements

Est-ce l'instance de la classe de l'événement que le gestionnaire va transmettre aux écouteurs (event listeners)?

Oui

Ainsi les écouteurs pouront utiliser les méthodes définies dans la classe événement pour faire leur travail.


Evénements

Qui crée une instance de la classe événement?

 

  • 1- Le gestionnaire d'événements
  • ou
  • 2- Celui qui déclenche l'événement
  • 2. Celui qui déclenche l'événement

Le gestionnarie d'événements transmet l'instance de la classe événement à l'écouteur.


Evénements

Si l'on souhaite créer notre propre classe événement, quelle classe doit-elle étendre?

La classe Event du composant EventDispatcher de Symfony

use Symfony\Component\EventDispatcher\Event


Evénements

Est-ce une bonne pratique de regrouper le noms de nos événements que l'on souhaite créer dans une classe finale et d'associer chaque nom à une constante?

Oui
  • Ainsi on centralise et on appel le nom de notre événement de la manière suivante:

NomDeLaClasseFinale::NomDeLaConstante


Evénements - Vrai ou Faux

Lorsque l'on crée notre propre classe événement on lui ajoute les attributs, setters et getters qu'il faut afin que la classe écouteuse puisse récupérer ou modifier les valeurs que l'on souhaite.

Vrai

Tous les attributs ont un getter mais pas forcement un setter si on ne souhaite pas que la classe écouteuse modifie l'attribut


Evénements

Quelle méthode du service event_dispatcher utilise-t-on pour déclencher un événement?

La méthode: dispatch()
  • $this->get('event_dispatcher')->dispatch(a,b)
  • a est le nom de l'événement
  • b est l'instance de la classe événement

Evénements

Que signifie: déclencher un événement?

C'est prévenir le dispatcher d'événements qu'un événement vient de se produire pour qu'il prévienne les écouteurs (listeners)


Evénements
  • Quand l'événement se produit la méthode de la classe écouteuse est exécutée
  • Quel est l'argument de cette méthode?

Une instance de la classe événement.


Evénements

Dans Symfony, quel pattern est implémenté dans la gestion des événements?

Le pattern Observer


Evénements - Commentez ces lignes du fichier services.yml
  • La classe B est déclarée comme service et a pour nom ''titi''. Elle utilise le service ''mailer''.
  • La classe C est déclarée comme service et a pour nom ''toto''. Elle utlise le service ''titi'' et un tableau de valeurs. Elle écoute l'événement core.send_message que l'on a définit nous même avant avec une classe.
  • Quand l'événement se produit la méthode ''do'' de la classe C s'exécute.

Evénements

Qui des deux permet d'écouter de manière dynamique un événement?

  1. Les écouteurs (event listeners)
  2. Les souscripteurs d'événements (event subscribers)
  • 2- Les souscripteurs d'événements (event subscribers)

Evénements - Vrai ou Faux

Le découplage entre les événements et les écouteurs permet-il de pouvoir déclencher des événements alors que l'on a pas encore définit les écouteurs?

Oui


Evénements

Quand on souhaite créer une classe souscripteur d'événement quelle interface doit-elle implémenter?

EventSubscriberInterface


Evénements

Quelle est la différence entre un écouteur et un souscripteur d'événement ?

  • L'Ecouteur écoute toujours le même événement déclaré dans un fichier de configuration (service.yml par exemple)
  • Le souscripteur d'événement peut écouter dynamiquement un ou plusieurs événements.

Evénements

Quand on souhaite créer une classe souscripteur d'événement quelle méthode obligatoire de l'interface EventSubscriberInterface doit-elle implémenter?

La méthode: getSubscribedEvents()

Cette méthode doit retourner un tableau qui définit:

  1. le nom de l'événement
  2. le nom de la méthode à exécuter
  3. la priorité (facultative)

Evénements

Comme appel-t-on en anglais un écouteur d'événement?

Event Listener


Evénements

Comme appel-t-on en anglais un souscripteur d'événements?

Event Susbscriber


Commentez ces lignes situées dans un souscripteur d'événement
Méthode de l'interface EventSubscriberInterface

Cette méthode retourne un tableau qui définit:

  1. Le nom de l'événement situé dans la constante POST_MESSAGE de la classe CoreEvents
  2. Le méthode 'do' de la classe à exécuter quand l'événement sera déclenché
  3. La priorité de 2 qui est supérieure à celle comprise entre -255 et 1

Evénements
  1. Où déclare-t-on la priorité d'exécution d'un écouteur?
  2. Où déclare-t-on la priorité d'exécution d'un souscripteur d'événement?
  1. Dans un fichier de configuration pour l'écouteur
  2. Dans la méthode getSubscribedEvents() pour un souscripteur d'événement

Evénements - Dans le fichier services.yml...
  1. Quel est le nom du tag pour un écouteur?
  2. Quel est le nom du tag pour un souscripteur d'événement?
  1. kernel.event_listener
  2. kernel.event_subscriber

Evénements

Combien il y a-t-il de niveau de priorités pour les ''events listeners'' et les ''events subscribers''

De -255 à 255


Evénements

Si l'on ne définit pas de niveau de priorité pour un écouteur ou un souscripteur d'événement, de combien sera-t-il par défaut?

0


Evénements

Pour un même événement, comment faire pour qu'un écouteur empèche l'exécution de l'écouteur suivant?

L'Ecouteur doit utiliser la méthode stopPropagation()


Evénements-Commentez ces lignes situées dans services.yml
  • La classe ''MessageListener'' est définie comme un service. Le nom du service est ''toto'' et utilise le service ''titi'' pour fonctionner.
  • Elle est un souscripteur d'événement car le nom du tag est kernel.event_subscriber

Traduction - Dans le fichier app/config/config.yml

Quel paramètre Symfony regarde-t-il pour savoir quelle langue par défaut utiliser si le client ne demande rien?

Le paramètre 'default_locale'

Traduction

Si la valeur du paramètre %locale% n'est pas défini, quelle langue par défaut Symfony utilisera-t-il?

L'Anglais


Traduction

Quelle est la différence entre la valeur fr_FR et fr_CH pour le paramètre %locale%?

Code ISO639-1 de la langue + Code ISO3166-2 du pays
  • fr_FR indique la langue Française de France
  • fr_CH indique la langue Française de Suisse

Traduction

A l'installation de Symfony, quelle est la valeur par défaut du paramètre %locale%?

L'Anglais

en


Traduction

Symfony nous permet-il:

  1. De traduire notre site en différentes langues
  2. De placer du texte dynamique au milieu de nos traductions
  3. De traduire le contenu d'entité ?

Oui


Traduction

Quel paramètre, Symfony regarde-t-il, pour savoir quelle langue utiliser pour le service de traduction?

Le paramètre 'fallbacks'

Traduction

La traduction est-elle possible dans un contrôleur et dans une vue?

Oui


Traduction

Dans un contrôleur, quel est le nom du service de traduction que l'on utilise pour traduire du texte?

Le service 'translator'

$this->get('translator')


Traduction-Commentez ces lignes situées dans un contrôleur
  • Ligne 01: On récupère une instance du service translator
  • Ligne 02: On récupère dans $textTraduit la traduction de la chaine source 'Salutation' qui est située dans un fichier de traduction du catalogue.

Traduction

Qu'est-ce qu'un catalogue dans le framework Symfony?

  • Un catalogue est un ensemble de fichiers de traduction qui contiennent les traductions des chaines sources.
  • Ces fichiers de traduction peuvent être regroupés par domaine.

Traduction

Un catalogue peut-il être constitué de plusieurs domaines?

Oui


Traduction

Quel est le nom du domaine de ce fichier de traduction: messages.fr.yml?

messages


Traduction

Le contenu d'un fichier de traduction du catalogue est-il sensible à la case et aux accents?

Oui
  • Symfony recherche la correspondance exacte de la chaine source dans un fichier de traduction.
  • C'est pour cela que l'on parle de catalogue et pas de dictionnaire.

Traduction

Dans une vue, quels sont les filtres Twig ou les balises Twig, que l'on doit utiliser au choix pour traduire.

  • Le filtre: |trans
  • Le filtre |transchoice
  • La balise: {% trans %}   {% endtrans %}
  • La balise: {% transchoice %} {% endtranschoice %}

Traduction - C'est deux lignes sont-elles équivalentes?
  • {{ 'Bonjour'|trans }}
  • {% trans %} Bonjour {% endtrans %}

Oui


Traduction
  • Peut-on utiliser des balises HTML ou du code Twig entre les balises Twig suivantes?

{% trans %}  {% endtrans %}

Non


Traduction

Dans un bundle, dans quel repértoire doit se trouver les fichiers de traduction qui constituent le catalogue?

NomDuBundle/Resources/Translations


Traduction

Quels sont les trois formats possibles de fichiers de traduction du catalogue?

  • XLIFF
  • YAML
  • PHP

Traduction

Dans un catalogue, quand une même chaine source se retrouve traduite dans deux fichiers de traduction différents d'un même domaine, quelle traduction l'emporte?

La traduction située dans le bundle chargé en dernier dans le fichier app/kernel.app


Traduction - Dans un catalogue

Quand une même chaine source se retrouve traduite dans deux fichiers de traduction différents d'un même domaine, quelle traduction l'emporte?

  • Celle située dans app/Resources/translations
  • Celle située dans NomDuBundle/Resources/translations

Celle située dans app/Resources/translations


Traduction - Quel est le format de ce fichier de traduction?

XLIFF


Traduction-Ce fichier de traduction est-il correctement écrit?
Oui
  • Ne pas oublier de mettre entre guillemets une chaine source qui contient ':' afin de le différencier du ':' utilisé par Yaml
  • On ne met pas de guillemets pour un ':' situé en fin de ligne

Traduction

En développement, Symfony regénère-t-il le cache du catalogue à chaque exécution de l'application?

Oui


Traduction

En production, Symfony regénère-t-il le cache du catalogue à chaque exécution de l'application?

Non

Il faut donc penser à vider le cache aprés une modification de nos fichiers de traduction, pour que cette modification soit effective.


Traduction

En développement,

  1. Est-il nécessaire de vider le cache pour prendre en compte l'ajout d'un nouveau fichier de traduction?
  2. Est-il nécessaire de vider le cache pour prende en compte l'ajout d'une traduction dans un fichier de traduction déjà existant?
  1. Oui, si on ajoute un nouveau fichier de traduction
  2. Non, si on ajoute une traduction dans un fichier déjà existant