Support de la conférence donné par Olivier ALLAIN au Forum PHP Afup 2019.
Quand les solutions e-commerce ne peuvent plus rien pour vous, il ne vous reste plus qu’un recours, un seul : Sylius ! Venez découvrir ce qui se cache sous le capot : de l’architecture à la roadmap en passant par les plugins ou les tests afin que le lancement de votre prochain projet de site e-commerce se déroule comme votre plan préféré, c’est-à-dire, sans accroc !
5. 2010
Création de Sylius pour la
vente de produits de
beauté en Pologne
2011
Réécriture et publication
sous forme de Bundles
Symfony Open Source
2014
Création de l'agence
Sylius, qui intègre
Sylius
2016
Développement d'une
nouvelle version, mieux
structurée et plus complète
2017
Arrêt de l'agence
d’intégration de Sylius
pour se concentrer sur
Sylius
6. Sylius v1.0.0
Première version
stable
Fév
2018
Sylius v1.1.0
Symfony 3.4
actions groupées en BO
configuration via dotenv
Juin
2018
Sylius v1.2.0
Symfony 4.1
Configuration du
ResourceBundle améliorée
Oct
2018
Sylius v1.3.0
Symfony Flex
Plugins : Invoicing, Admin
order creation, ...
Fév
2019
Sylius v1.4.0
PHP 7.3
RbacPlugin
Août
2019
Mai
2019
Sept
2017
Sylius v1.6.0
Amélioration de l’Admin
Amélioration du plugin
ShopApiPlugin
Sylius v1.5.0
Extraction de
composants et bundles
8. UNE PHILOSOPHIE-
Backward Compatibility Promise
3.4 // 4.3
● High Developer Productivity
● Focused & Easy To Integrate
● Simple To Deploy & Host
Enables
● Fast Iteration
● Prepared for the Future
● Framework PHP
● Qualité du code
● Principes SOLID
● Tests
80%
DES BESOINS E-COMMERCE COUVERTS
POUR LE PLAISIR DES
DÉVELOPPEURS
11. COMPONENTS
----
● 1 composant = 1 responsabilité / fonctionnalité
● Découplé et en PHP pur, donc utilisable sur tous vos
projets PHP
Exemple : Addressing Component
BUNDLES
----
● 1 bundle = 1 composant
● Bundle Symfony, donc utilisable sur tous vos projets
Symfony
● Configuration, formulaire, service, ...
Exemple : SyliusAddressingBundle
CORE
----
● SyliusCoreBundle : intégrer d’autres Bundles
Exemple : Une commande est associée à des adresses.
12. ADMIN
----
● Administration simple et fonctionnelle
● Peut être trop simpliste et pauvre en fonctionnalités ?
SHOP
----
● La boutique : épurée et simple
● Peut être trop ? Pas de gestion CMS par exemple
API
----
● RESTful JSON/XML API
● Modèle CQS (et pas CRUD) pour traiter la logique dans
un bus de commande
● Système de tri et de filtres basiques
● A quand la migration sur Api Platform ?
Toutes ces briques sont bien sûr remplaçables !
13. • LE PROJET BELENVY •
Nous n'utilisons pas l’API
Nous utilisons des Bundles Symfony
friendsofsymfony/jsrouting-bundle
mailjet/mailjet-bundle
jmose/command-scheduler-bundle
...
16. LE FRONT-OFFICE-
● Par défaut
● Peu connu des devs front
● Une intégration avec Webpack
Encore pas simple
● Plugin officiel supporté par l’
équipe Sylius
● Webpack Encore
● Qui ne connaît pas Bootstrap
?
● Je vous le conseille 😉
● PWA
● Angular
● React
● VUE.js
● ...
SEMANTIC UI BOOTSTRAP
EN
UTILISANT
L’API
20. Bundle de gestion du CRUD des entités
Très utilisé par le Shop et le l’API
Utilisation des DTO
Pour des manipulations plus complexes
OnePageCheckout Belenvy
Les réponses des controller sont agnostiques
Possibilité de les utiliser indifféremment par le Shop et l'API
RESSOURCES BUNDLE-
21. WINZOO STATE MACHINE-
Les machines à états sont utilisées sur tous les changements de statuts dans Sylius
Sur chaque transition il est possible de câbler des évènements appelés callbacks
Très pratique pour envoyer un mail au client afin de l’informer du changement de statut de sa
commande par exemple
Certains regretteront que ce ne soit pas symfony/workflow qui soit utilisé, mais il n'existait pas
à l'époque (difficilement remplaçable)
24. FormExtension
Très pratique pour ajouter aux
formulaires les attributs dont
vous avez besoin.
Les FormType sont souvent en
"final" donc c'est une pratique
conseillée
i
25. EVENTS (SONATA BACK & FRONT)-
Les événements Sonata sont présents en Back et en Front et permettent d’ajouter des
comportements facilement
Pour des besoins plus spécifiques il est toujours possible de surcharger le thème.
i
26. FIXTURES-
Extension de Doctrine data
fixtures
Permet d'avoir un jeu de
données cohérent pour les tests
Permet d'avoir des données
d'initialisation pour la production
i
27. OVERRIDING-
Sylius tire toute la puissance de Symfony et de Twig pour overrider
n'importe quels classe, fonction, configuration, template, …
Ainsi que tous les mécanismes présents sur Symfony, par exemple, la
décoration de service.
29. LES OUTILS POUR LES TESTS
● PHPSpec permet d’
écrire une spécification
du code avant d'écrire le
code
● 410 classes testées (6
secondes)
● Les tests unitaires, la
base 😉
● Tests: 422, Assertions:
1452 (2 minutes)
● Le comportement de l'application
est décrit par des scénarios, qui
sont ensuite transformés en tests
automatisés, joués par Behat.
● Toutes les fonctionnalités de
Sylius sont couvertes par des
tests Behat
● Environ 1 400 scénarios et 15
000 steps
● 35 minutes sur Github, c'est long
● Exécute les outils précédemment cités + security-checker + phpstan + linters (Twig, Yaml)
● Total 45 minutes
31. LES OFFICIELS
LES TROUVER SUR PACKAGIST
● Sylius valide et officialise des plugins présents sur son site web
● +30 plugins
● Validation manuelle longue à faire, d'où le peu de plugins validés
● https://packagist.org/explore/?tags=sylius-plugin
● +70 plugins
LES AVANTAGES
● Ajout de fonctionnalités facilité
● Cycle de développement plus rapide
i
32. • LE PROJET BELENVY •
Nous utilisons des Plugins Sylius
friendsofsylius/sylius-import-export-plugin
bitbag/cms-plugin
...
34. POURQUOI AVOIR CRÉÉ SYLIUS PLUS ?
LES AVANTAGES
● Multi-boutique avancé
● Gestion des retours (RMA)
● Inventaire multi-sources
● Permissions utilisateurs avancées
● Support technique
● Un responsable de la réussite client
● Une assistance à la réussite du projet (option)
● Se rapprocher de ses clients et aider au déploiement de Sylius via le support
● Monétiser du service pour pérenniser l’entreprise et rester sur un mode
d’autofinancement
38. Sylius ne couvre pas tous les besoins... cependant il existe probablement un plugin
pour palier à cela, ou alors il vous faudra coder 😉
La recherche de produit pèche en front, à cause du nombre important de produits ?
Vous avez besoin d’une recherche avancée basée sur des filtres ?
⇒ Le Plugin bitbag/elasticsearch-plugin répond à ces besoins !
Beaucoup de produits en back-office qui entraînent des lenteurs sur l’affichage de la liste
des produits ? Une PR refusée existe, cependant vous pouvez vous en inspirer ou en
proposer une autre 👍
LES LIMITES
?
i
40. ● Des projets à développements spécifiques
● Quand les solutions classiques ne répondent pas aux métiers du client
Exemples :
La présentation produit n’est pas classique (catégorie, fiche produit, panier)
Le tunnel d’achat n’est pas conventionnel
Un front exotique de type PWA/SPA
POUR QUELS TYPES DE PROJETS ?