Application web développée avec Symfony 7.4 permettant à des étudiants/participants d'un même organisme (répartis sur plusieurs campus) de créer, consulter et s'inscrire à des sorties (activités, sorties culturelles, sportives, etc.).
- Fonctionnalités
- Stack technique
- Prérequis
- Installation
- Base de données
- Lancer le projet
- Comptes de démonstration
- Structure du projet
- Cycle de vie d'une sortie
- Authentification : connexion, déconnexion, gestion de compte via Symfony Security.
- Gestion des sorties : création, modification, publication, annulation et suppression d'une sortie par son organisateur.
- Inscription / désistement des participants aux sorties, avec gestion automatique du nombre de places.
- Filtrage des sorties sur la page d'accueil (campus, nom, dates, organisateur, inscrit/non inscrit, sorties terminées).
- Gestion des lieux avec filtrage dynamique par ville (API interne + JavaScript).
- Profils utilisateurs : consultation, édition, upload de photo de profil.
- Back-office administrateur : gestion des utilisateurs, des campus et des villes.
- États automatiques des sorties (
En création,Ouverte,Clôturée,En cours,Terminée,Annulée,Historisée) recalculés viaSortieStateManager.
- PHP ≥ 8.4.15
- Symfony 7.4 (Framework Bundle, Security Bundle, Doctrine Bundle, Messenger, Mailer, Twig, Asset Mapper…)
- Doctrine ORM 3.x / Doctrine Migrations
- PostgreSQL (voir
compose.yaml) — la base peut être adaptée à MySQL/MariaDB si besoin - Bootstrap 5.3 (CSS/JS via CDN)
- Stimulus / Turbo (Symfony UX)
- PHPUnit 13 pour les tests
- Symfony Docker Compose pour l'environnement de développement (base de données + Mailpit)
- PHP 8.4.15 ou supérieur, avec les extensions
ctypeeticonv - Composer
- Symfony CLI (recommandé)
- Docker et Docker Compose (pour la base de données et Mailpit)
- Node.js (facultatif, uniquement si vous ajoutez des dépendances JS via Asset Mapper/npm)
-
Cloner le dépôt
git clone <url-du-depot> sortir cd sortir
-
Installer les dépendances PHP
composer install
-
Configurer les variables d'environnement
Copier le fichier
.enven.env.localet adapter les valeurs si besoin (notammentDATABASE_URL,MAILER_DSN,APP_SECRET).cp .env .env.local
-
Démarrer les services Docker (base de données PostgreSQL + Mailpit pour les emails)
docker compose up -d
-
Créer la base de données
php bin/console doctrine:database:create --if-not-exists
-
Exécuter les migrations
php bin/console doctrine:migrations:migrate
-
Charger les fixtures (données de démonstration : campus, villes, lieux, participants, sorties)
php bin/console doctrine:fixtures:load
Avec le Symfony CLI :
symfony server:startOu avec le serveur PHP intégré :
php -S 127.0.0.1:8000 -t publicL'application est ensuite accessible sur https://localhost:8000 (ou http://127.0.0.1:8000).
Pour compiler/installer les assets gérés par AssetMapper :
php bin/console importmap:install
php bin/console asset-map:compileLes fixtures créent plusieurs participants avec le mot de passe password123, par exemple :
| Pseudo | Rôle | |
|---|---|---|
| jeannine@sortir.com | Jeannine L. | Administrateur |
| remi@sortir.com | MarcB | Utilisateur |
Consultez src/DataFixtures/AppFixtures.php pour la liste complète.
config/ Configuration Symfony (packages, routes, sécurité...)
migrations/ Migrations Doctrine
public/ Point d'entrée web, assets publics, uploads
src/
├── Controller/ Contrôleurs (Main, Sortie, Profile, Admin, Api...)
├── Entity/ Entités Doctrine (Sortie, Participant, Campus, Lieu, Ville, Etat)
├── Form/ Formulaires Symfony (SortieType, ProfileType, CampusType...)
├── Repository/ Repositories Doctrine
├── Security/ UserChecker (blocage des comptes désactivés)
├── Service/ SortieStateManager (gestion automatique des états)
└── DataFixtures/ Fixtures de démonstration
templates/ Vues Twig (base, sortie, profil, admin, sécurité)
assets/ JavaScript / CSS (AssetMapper, Stimulus)
tests/ Tests PHPUnit
Les états d'une sortie (Etat) évoluent automatiquement selon la date et le nombre d'inscrits, via App\Service\SortieStateManager :
- En création — brouillon, visible uniquement par l'organisateur, modifiable/supprimable librement.
- Ouverte — publiée, inscriptions possibles.
- Clôturée — date limite d'inscription dépassée ou nombre de places atteint.
- En cours — la sortie a démarré.
- Terminée — la sortie est achevée (date de fin dépassée).
- Annulée — annulée par l'organisateur avant son démarrage (avec motif obligatoire).
- Historisée — archivée un mois après la fin (ou l'annulation) de la sortie.
Projet réalisé dans le cadre d'une formation ENI (application Symfony "Sortir.com").