L’usage de Symfony2, l’organisation du code et l’usage du projet Sonata chez Canal+ pour répondre aux enjeux de la refonte d’une partie de la plateforme web. La plateforme présente de nombreux challenges techniques : SDK, API privée, API publique restful+hal, création de contenus riches, huit applications différentes avec une base de code commune, etc. Comment il a été possible d’améliorer certaines parties de Sonata ainsi que l’approche choisie pour la création de certains composants transverses.
2. 22
• Sonata Project Lead dev
• 15% des installations de Symfony
• Polyglot: Python, Go, Javascript,
Puppet, etc …
• @th0masr
• github.com/rande
ThomasRabaix
ArchitecteLogiciel
ekino.
3. 33
Canal+
Refonte de certains backoffices de gestion
de contenu:
• 8 applications dans un repo git
• 2 APIs : Une API interne et une API
Publique
• 1 SDK : pour consommer l’API publique
4. 44
Structuredefichiers
adaptéeaubesoin
• Chaque application doit pouvoir être isolée
• Pas de dépendance entre applications
• Même base de code (Component)
apps
logs
cache
src/CanalPlus
Component
Bundle/App1Bundle
app1_prod.log
app1_prod
app1
App1Kernel.php
web
config
5. 55
• ./console app1 your:command
• Un point d’entrée pour symfony
• clear cache: rm –rf cache/* #win
• Tests unitaires sur l’ensemble du code des
applications
• Réduction de la dette technique car les
applications sont mises à jour à chaque
évolution
• Makefile: « One tool to rule them all »
• Réalité des projets web: bower, npm, gulp,
capistrano, scss, bash, pip, bundler, etc ….
• make install
• make update
Structure de fichiers
adaptés au besoin
9. 99
• L’AdminBundle permet de gagner du temps
pour la création d’IHM standard
• Permet d’inclure des fonctionnalités riches
grâce à ReactJS (ou autres solutions)
• Création d’un SonataRestAdminBundle
pour administrer des API RestFul
• Une IHM unique pour croiser les données
d’API ou d’une base de données
• Gestion des droits provenant de Symfony
Sonata
AdminBundle
Le pivot de la
l’administration des
données
• Permet l’édition de contenus
• Gestion des règles métiers
• Gestion des rôles
10. 1010
• Intégration des fonctionnalités de resize
dynamique de nginx => en c; en cache; ça
booste …
• POC pour utiliser thumbor pour le crop
intelligent d’image
• Stockage des médias sur Amazon
• Budget is the limit
Sonata
MediaBundle
L’agrégateur des
sources multimédia
• Rajout d’un mode mosaïque
• Rajout d’une arborescence pour retrouver
les médias facilement.
• Intégration de médias interne du SI Canal+
grâce à la création de « providers »
spécifiques
11. 1111
• Création de blocs métier pour se connecter
aux web services existants
• La complexité est cachée aux utilisateurs.
• Intégration facile avec Akamai (CDN)
• Facilité grâce à Symfony et Sonata qui
intègrent les notions de cache HTTP
Sonata
PageBundle
L’intégrateur de flux
pour des pages
riches.
• Amélioration de l’ergonomie de
l’administration d’une page
• « SharedBlock » réutilisation de blocs sur
plusieurs pages.
12. 1212
• RestFul API with JSON+HAL
• HateosBundle: création de ressources HAL
à partir d’annotations
• Il n’existe pas de client pour consommer
ces ressources
• Création d’un librairie:
https://github.com/ekino/php-hal-client
• Permet de naviguer dans les réponses HAL
• Option pour intégrer JMS Serializer:
• Ressources => Objets
Rest Json+Hal