Présentation du projet #
Ce projet a été réalisé à la fin du troisième semestre de mes études en informatique. L’objectif était de mettre en pratique nos connaissances en développement web et en bases de données. Pour ce faire, nous devions créer un faux site web de vente en ligne presque entièrement fonctionnel. Notre principale contrainte était que le backend devait être écrit en PHP, avec l’utilisation d’un framework de notre choix. Le thème que nous avions choisi était la vente de bijoux de luxe. Le projet a duré un mois, en parallèle avec d’autres projets et nous étions cinq à développer ce site.
Défis techniques #
L’architecture MVC #
L’un des points importants de ce projet était que nous avions pour consigne de respecter l’architecture MVC (Modèle, Vue, Contrôleur). Cependant, Laravel, contrairement à d’autres frameworks comme Symfony, offre une approche très souple de l’architecture MVC.
Le premier problème est qu’il n’y a pas d’entités à proprement parler : tout est géré par l’ORM, ce qui crée une dépendance entre la façon dont les données sont stockées et les entités métier. Le second problème est qu’avec Laravel, la logique métier et les requêtes SQL via l’ORM ont tendance à être implémentées directement dans les contrôleurs. Ces deux problèmes font que l’architecture n’est plus du tout conforme à la vision MVC, et le code devient peu maintenable et peu évolutif.
Pour régler ce problème, j’ai donc forcé une implémentation stricte de l’architecture MVC dans notre projet. La première étape a été de créer des entités totalement séparées de la logique de stockage des données. Puis, j’ai fourni des repositories qui utilisent l’ORM pour instancier les entités. Enfin, j’ai créé des services qui font l’interface entre les repositories et les contrôleurs ; ils gèrent aussi la logique concernant les sessions ou les cookies. Avec cette implémentation, la logique métier est complètement découplée de la base de données et des contrôleurs.
Le projet était malheureusement trop avancé quand nous avons pris la décision de faire cette refactorisation. Avec du recul, on peut remettre en question le fait d’avoir choisi Laravel au départ, nous l’avions choisi pour sa modernité et son intégration avec des frameworks frontend, mais Symfony aurait peut-être été une meilleure solution.
Utilisation de Vue.js avec Laravel #
Ce projet se concentrait sur l’utilisation de PHP et du framework Laravel. Cependant, pour nous faciliter la partie frontend, qui était conséquente, et améliorer l’expérience utilisateur avec une interface réactive, nous avons choisi d’ajouter un framework JavaScript : Vue.js.
L’intégration de Vue.js avec Laravel se fait très simplement grâce à l’utilisation d’Inertia. Grâce à cet outil, nous n’avons pas besoin de créer une API que le frontend va contacter pour récupérer les données. Au lieu que Laravel fasse le rendu de la page côté serveur en y ajoutant les données, il utilise Inertia pour déclencher le rendu de Vue.js côté client, en lui fournissant les données nécessaires.
L’utilisation de ces deux frameworks permet d’avoir un site dynamique et réactif côté client, tout en gardant l’efficacité de Laravel pour le backend.
Gestion de la base de données #
Le projet a également nécessité beaucoup de temps pour la gestion des données, qui étaient nombreuses (produits, commentaires, comptes, commandes, etc.). Cela a été l’occasion pour nous de découvrir les systèmes de migrations et de seeders, qui se sont avérés très pratiques tout au long du projet.
Nous avions aussi pour consigne de mettre en place des fonctionnalités plus avancées, comme des triggers. Ceux-ci nous ont permis de gérer des cas complexes et de maintenir des données cohérentes à tout moment, en gérant notamment les nombreux cas d’erreur. Enfin, nous avons également utilisé des procédures stockées pour faciliter certaines opérations.
Résultats #
En conclusion, nous avons réussi à mener à bien ce projet et à livrer une version plutôt aboutie du site. Le site contient les fonctionnalités suivantes :
- Connexion et inscription.
- Gestion des informations personnelles (adresses, favoris, commandes).
- Visualisation du catalogue de produits.
- Gestion du panier.
- L’ensemble du processus de commande.

Le code source du projet est consultable sur ce dépôt GitLab :