MesVoyages

Mes Voyages est une application web développée en PHP avec le framework Symfony 6.4. Elle permet de tenir un carnet de voyages numérique : chaque visite est documentée avec la ville, le pays, une note sur 20, un avis rédigé, les températures enregistrées, une date, une photo et des tags d'environnement (mer, montagne, ville, etc.).

Le site expose une interface publique permettant de consulter la liste des voyages, de les trier par colonne (ville, pays, note, date) et de les filtrer par ville, pays ou environnement. Une interface d'administration permet de créer, modifier et supprimer des voyages et des environnements. Un formulaire de contact est également disponible pour envoyer un message par e-mail.

L'application s'appuie sur une base de données MySQL, gérée via Doctrine ORM et Doctrine Migrations. Les images sont gérées par VichUploaderBundle. Le front-end utilise le système Asset Mapper de Symfony avec Stimulus et Turbo (UX).

voir sur github
MesVoyages

Compte rendu

Mes Voyages est un projet web complet réalisé dans le cadre d'une formation. L'objectif était de concevoir une application de gestion de voyages couvrant l'ensemble du cycle de développement : analyse du besoin, modélisation de la base de données, développement back-end et front-end, tests automatisés et recette.

L'application dispose de deux espaces distincts :

  • Espace public : consultation, tri et filtrage des voyages, fiche détail d'un voyage, formulaire de contact.
  • Espace administration : création, édition et suppression des voyages (avec upload d'image) et des environnements.

La validation des données est assurée côté serveur par les contraintes Symfony/Validator (note entre 0 et 20, cohérence température min/max, validation des champs du formulaire de contact). Les e-mails sont envoyés via Symfony Mailer avec Messenger comme transport asynchrone. Les tests automatisés couvrent les repositories et les règles de validation métier.

Note. Installation locale : Ce projet n'est pas hébergé en ligne. Pour le tester, il est nécessaire de l'installer localement en suivant les instructions détaillées dans la section. Installation locale ci-dessous.

Langages et technologies utilisés

  • Langage back-end : PHP 8.1+
  • Framework : Symfony 6.4
  • ORM : Doctrine ORM 3 / Doctrine Migrations
  • Base de données : MySQL
  • Moteur de templates : Twig
  • Formulaires : Symfony Form / Validator
  • Upload de fichiers : VichUploaderBundle 2.x
  • Envoi d'e-mails : Symfony Mailer + Messenger
  • Front-end : Symfony Asset Mapper, Stimulus, Turbo (UX)
  • Tests : PHPUnit 11, DAMA Doctrine Test Bundle
  • Serveur local : Symfony CLI / Apache
  • Gestion de dépendances : Composer, npm
  • Versioning : Git / GitHub

Présentation du contexte

Ce projet a été développé dans le cadre d'une formation en développement web. Le besoin exprimé était de créer un carnet de voyages numérique personnel, accessible depuis un navigateur, permettant de conserver et de retrouver facilement les souvenirs de voyages passés.

L'application devait être suffisamment complète pour couvrir les notions fondamentales du développement web avec Symfony : modélisation relationnelle, gestion des formulaires, upload de fichiers, envoi d'e-mails, sécurité (tokens CSRF), tests automatisés et déploiement.

Cahier des charges

Fonctionnalités demandées :

  • Afficher la liste de tous les voyages enregistrés dans la base de données.
  • Permettre de trier la liste par ville, pays, note ou date.
  • Permettre de filtrer la liste par ville, pays ou type d'environnement.
  • Afficher la fiche détail d'un voyage.
  • Permettre, depuis l'espace administration, de créer, modifier et supprimer un voyage (ville, pays, note /20, avis, températures min/max, date, photo, environnements associés).
  • Permettre, depuis l'espace administration, de gérer les environnements (mer, montagne, ville, etc.).
  • Proposer un formulaire de contact qui envoie un e-mail.
  • Valider les données côté serveur (contraintes métier : note entre 0 et 20, température max > température min).
  • Gérer l'upload et l'affichage des photos de voyage.
  • Écrire des tests automatisés sur les repositories et les validations.

Missions

  • Analyse du besoin et modélisation de la base de données (entités Visite, Environnement, relation Many-to-Many visite_environnement).
  • Mise en place du projet Symfony 6.4 et configuration de l'environnement (.env, Doctrine, Mailer, Messenger).
  • Développement des entités Doctrine et génération des migrations.
  • Développement des repositories avec méthodes de tri et de filtrage dynamiques.
  • Développement des contrôleurs public (VoyagesController) et administration (AdminVoyagesController, AdminEnvironnementController).
  • Création des formulaires Symfony (ContactType, formulaire de voyage avec gestion d'image via Vich).
  • Création des templates Twig (pages publiques et administration).
  • Configuration de VichUploaderBundle pour la gestion des photos.
  • Configuration de Symfony Mailer et Messenger pour l'envoi asynchrone d'e-mails.
  • Écriture des tests PHPUnit (tests de repository et tests de validation d'entité).
  • Configuration du projet pour fonctionner avec un .htaccess à la racine (docroot flexible).

Installation locale

Le site n'est pas hébergé en ligne. Pour tester l'application, suivez les étapes ci-dessous :

Prérequis : PHP ≥ 8.1, Composer, MySQL, Symfony CLI (recommandé).

# 1. Cloner le dépôt
git clone https://github.com/rabarijoy/mesvoyages.git
cd mesvoyages

# 2. Installer les dépendances PHP
composer install

# 3. Configurer l'environnement
#    Copier .env et renseigner DATABASE_URL, MAILER_DSN et APP_SECRET
cp .env .env.local
# Éditer .env.local avec vos paramètres locaux

# 4. Créer la base de données et jouer les migrations
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate

# 5. (Optionnel) Charger des données de test
php bin/console doctrine:fixtures:load

# 6. Lancer le serveur de développement
symfony server:start
# ou : php -S localhost:8000 -t public

L'application est ensuite accessible à l'adresse https://localhost:8000.

Ressources supplémentaires