Nous sommes tombés amoureux du framework Symfony depuis le premier jour, ce n’est plus un scoop... et depuis, nous consacrons pas mal d’énergie au quotidien à chercher de nouvelles solutions symfo-compatibles pour répondre de manière pertinente et pragmatique aux projets qui nous sont confiés. C’est ainsi que nous avons adopté Sylius !
Mais pourquoi Sylius ?
En matière digitale, le e-commerce fait partie des sujets particulièrement complexes (tout du moins from scratch) et nous savons de quoi nous parlons puisque nous avons eu à traiter de sacrés morceaux en la matière. De plus, beaucoup de gros CMS du marché sont spécialisés dans ce domaine (Shopify, Magento, PrestaShop, WooCommerce…), ce qui rend la concurrence très difficile pour des agences spécialisées dans le sur-mesure comme ZOL.
Pour continuer de développer notre expertise en la matière, l'agence a décidé de se jeter à pieds joints dans le développement de solutions e-commerce robustes et performantes.
Mais, comment s'y prendre ?
Développer des e-commerce entièrement sur mesure ? Pourquoi pas et même avec plaisir mais il faut avoir le budget qui va avec, ce qui n’est pas toujours le cas de tous nos clients.
Monter une équipe Magento ? Nous ne croyons pas que les CMS du marché puissent réellement répondre à un besoin custom.
Et c'est là que Sylius s'est présenté comme une jolie alternative : une solution e-commerce développée sur Symfony ; ou comment allier l'utile à l'agréable !
Parlons technique
Entrons maintenant dans le vif du sujet (les développeurs vont être contents).
Le fonctionnel en bref
Sylius se présente à la fois comme une plateforme e-commerce et comme un framework.
Une fois installée et configurée, vous bénéficiez d'une solution fonctionnelle comportant les briques principales d'un site e-commerce :
-
gestion d'un catalogue produits
-
gestion de la TVA
-
panier et tunnel d'achat
-
gestion des commandes et expéditions
-
gestion des clients et de la facturation.
En effet, après quelques étapes de configuration, que l’on détaillera par la suite, et l’ajout de quelques produits, vous avez à votre disposition une boutique en ligne entièrement administrable fournie avec une interface utilisateur simple et user-friendly.
Installation et configuration
A l’image d’un projet Symfony classique, Sylius peut être installé via composer :
composer create-project sylius/sylius-standard MyEcommerceProject.
On lance ensuite la commande bin/console sylius:install qui va exécuter 3 actions :
-
Vérification des requirements du système avant l’installation de Sylius
-
Création de la base de données
-
Configuration de la devise et de la locale par défaut et création manuelle d’un administrateur.
Le projet est à présent installé. On peut passer à la configuration.
Sylius fonctionne avec un système de channels, qui correspondent à différents environnements. Chaque channel est défini par un code unique et par diverses options de configuration telles que des devises, des locales, un calculateur, des zones de taxes…
Il est donc possible de déterminer à quel(s) channel(s) ont accès les utilisateurs de la boutique et quels produits y sont disponibles et à quel prix.
On peut également configurer les méthodes de paiement, d’expédition et facturation.
Architecture
L’architecture du framework est en grande partie régie par le contenu des fichiers de configuration.
A titre d’exemple, la création d’une entité suit un schéma bien précis, défini dans la configuration du framework :
-
création de l’entité
-
ajout d’un fichier de configuration défini par sylius yaml de type grid qui permet de construire la vue list de l’entité avec des options de crud classique (create, edit, delete).
-
ajout d’un fichier de routing permettant de faire l’intermédiaire entre le grid de l’entité et le routing de Sylius
-
déclaration de l’entité dans un fichier resources.yaml.
Pour développer des fonctionnalités spécifiques, l'architecture de ce framework peut être modifiée par override ou par héritage des différents controllers, services, formulaires et templates du back et du front-end. Du classique de chez classique en PHP !
Les plus et les moins de Sylius
La mise en place de Sylius sur plusieurs projets nous a permis de déterminer les points forts et les points faibles de cette solution e-commerce, selon nos critères:
Points faibles de Sylius
-
C’est une solution jeune avec un faible historique et qui a, à ce jour, une communauté plus faible que celles des CMS du marché (mais vous pouvez suivre la roadmap de sylius ici).
-
Une documentation parfois trop succincte
-
Sylius est basé sur Symfony, ce qui rend nécessaire la connaissance de cet autre framework.
Points forts de Sylius
-
Sylius apporte un vent de nouveauté dans le monde du e-commerce.
-
Construit en surcouche de Symfony, il bénéficie de tous ses composants.
-
C’est une solution open source.
-
Le modèle de la base de données de Sylius est simple : une table = un composant.
-
C’est un framework plus léger que les gros cms e-commerce.
-
Il est compatible avec plusieurs interfaces de paiement (Paypal, Stripe, HiPay..).
-
Sylius expose une api permettant de brancher un ERP, un CRM ou un système de mailing externe.
Notre coup de coeur
Avant de clôturer ce tour d'horizon de Sylius, une petite présentation d'un module que l'on a particulièrement apprécié s'impose. Il s'agit des rouages qui se cachent derrière le tunnel d'achat : c’est Winzou State Machine.
Sylius utilise le bundle Symfony associé à ce module pour proposer un système de tunnel d’achat basé sur des states, des transitions et des callbacks optionnelles.
Voici la configuration yml type du tunnel d’achat de Sylius, telle qu’elle est décrite dans la documentation officielle :
On définit tout d’abord la classe associée à la state machine (Order dans notre exemple), ainsi que les propriétés property_path, graph et state_machine_class.
On définit ensuite une liste de states, qui correspondent aux différents états de l’objet pendant sa durée de vie dans la state machine.La liste des transitions associe des états initiaux à des états finaux.
Enfin, les callbacks sont exécutées avant ou après les transitions (dans notre exemple elles sont toujours exécutées après). Chaque callback appelle une fonction en lui passant en argument(s) l’objet et des paramètres optionnels. Chaque fonction réalise une action bien spécifique, telle que l’insertion du panier en base de données, la création de la commande ou encore la décrémentation du stock.
Via l’édition de ces quelques lignes de configuration, nous pouvons ainsi modifier simplement le tunnel d’achat (par exemple suppression de l’état de paiement dans le cas de demandes de devis, ou ajouter une étape de login à la validation du panier).
A noter que cette fonctionnalité de “state machine” est aussi utilisée pour les statuts de livraison et de paiement.
La morale de cette histoire
Forts de tous ces constats, nous avons décidé début 2019 de nous lancer activement dans l'aventure Syliusienne et de l’ajouter à notre panel de solutions e-commerce sur-mesure. Nous nous sommes également rapprochés de l’éditeur pour nous positionner comme professional Partner et contribuer ainsi à faire évoluer encore ce petit framework prometteur !
En attendant vous pouvez déjà jeter un oeil à 2 de nos projets e-commerces développés avec Sylius :