Aller au contenu principal
← Actualités
Réalisation 22/03/2026 · 2 min de lecture

Cabinet Martin – Portail web patient

Cabinet Martin – Portail web patient
Contexte du projet

Cabinet Martin est un projet scolaire réalisé dans le cadre de mon BTS SIO option SLAM. L'objectif était de concevoir et développer un portail web complet pour un cabinet médical fictif situé à Laval, regroupant deux médecins généralistes.

J'ai pris en charge l'intégralité du cycle de développement : analyse du besoin, modélisation de la base de données, développement back-end et front-end, correction de bugs et mise en production partielle sur SQL Server.


Fonctionnalités développées

Authentification & espace patient

Inscription avec vérification d'email via lien signé (SymfonyCasts), connexion sécurisée avec gestion des rôles Symfony Security, et tableau de bord patient affichant les rendez-vous à venir, l'historique des commandes et les informations personnelles.

Pharmacie en ligne

Catalogue de médicaments organisé par catégories, fiches produits détaillées avec indicateur de stock en temps réel, panier hybride (session pour les visiteurs anonymes, base de données pour les connectés) avec fusion automatique à la connexion.

Commandes & factures

Processus de paiement simulé, génération automatique des lignes de commande, décrémentation des stocks, email de confirmation et téléchargement de factures PDF sécurisé (DomPDF) — chaque patient ne peut accéder qu'à ses propres factures.

Prise de rendez-vous

Calendrier dynamique affichant une semaine de créneaux de 30 minutes (8h–18h, lundi–vendredi), sélection du médecin et du créneau, confirmation par email avec récapitulatif complet.


Stack technique

PHP · Symfony 7.3 · Doctrine ORM · Microsoft SQL Server · Twig · Bootstrap 5 · DomPDF · Symfony Mailer · Git / GitHub


Difficultés et solutions

Le projet m'a confronté à plusieurs problèmes concrets : des contraintes NOT NULL sur SQL Server résolues via des valeurs DEFAULT dans les migrations, un conflit CSS entre le thème MediLab et Bootstrap résolu par des classes personnalisées, et la perte du panier à la connexion corrigée grâce à un subscriber sur LoginSuccessEvent fusionnant la session avec la base de données.

Réalisation
Toutes les actualités