Configuration discovery avec Symfony
Pour chaque requête / commande :
- Lecture du flux JSON : M6Web / WSClientBundle
- Surcharger la configuration du projet
- Lecture flux Json
- WsClient
- On ne se soucie pas du cache
- Profiling
- Surcharge de la configuration
- Pour chaque requête / commande
Surcharge de la configuration Symfony
- Impossible au runtime
- Le container est compilé
- Impossible à l'execution
- La configuration permet de définir (vision simple)
- des parameters
- des services
- tout est dans le DIC
- le DIC est compilé , la configuration ne sera plus utilisée
Service existant
services:
request_logger:
class: %request_logger.class%
calls:
- [ setLogger, [ @logger ] ]
- Service de log de requête
- Créé par quelqu'un d'autre
- Il log des requêtes suivant des filtres
- En l'état il ne log aucune requête
Configuration du bundle
m6_video_app_launch_client:
services:
request_logger:
id: request_logger
calls:
- [ setFilters, [ !loggerconfig.filters ] ]
- Injection de a valeur contenue dans le json
- Transparent à l'utilisation
- Extrait de la configuration du bundle que nous avons mis au point
- On ajoute un call au service
- -> La valeur du json est injecté
- -> Transparent à l'utilisation
Fonctionnement
services:
request_logger:
class: %request_logger.class%
calls:
- [ setLogger, [ @logger ] ]
- Passe de compilation
- Alias du service original : m6_applaunch.%s
- Recréé un service sous l'id original
- Service factory
- -> Rappel du service original
- -> Passe de compilation
- Au moment de la compilation du DIC
- Une bonne fois pour toutes
- -> Alias
- Nouveau service m6_applaunch.request_logger
- Exactement la même définition que le service request_logger
- -> Nouveau service sous l'id original
- Service factory
- Appel le service sous l'id alias, m6_applaunch.request_logger
- Applique les call
- Retourne le service
- Si un des appels ne peut être réalisé, on en fait aucun
Configuration complète
m6_video_app_launch_client:
host: 'http://host'
configurations:
loggerconfig:
project: 'request_logger'
version: '1.0.0'
parameters:
filters:
json: true
services:
request_logger:
id: request_logger
calls:
- [ setFilters, [ !loggerconfig.filters ] ]
wsclient: m6_ws_client
- host, project et version servent à forger l'url du json
- parameters permet de définir si certain éléments contiennent du json (json_decode)
- on reprend la même clé dans l'injection de parametre que dans la config
- on lui donne le wsclient à utiliser