Un projet Symfony complet avec authentification, gestion de produits, notifications en temps réel et API REST sécurisée.
- Fonctionnalités
- Technologies utilisées
- Installation
- Configuration
- Données de test
- Utilisation
- API Documentation
- Tests
- Structure du projet
- Système d'inscription/connexion sécurisé
- Rôles utilisateur (USER, ADMIN)
- JWT pour l'API
- Gestion des sessions web
- CRUD complet des produits
- Système de points pour les achats
- Catégorisation des produits
- Interface admin dédiée
- Notifications en temps réel
- Types : produits, blocage, réactivation, achats, points
- Interface de gestion pour les admins
- API Platform intégrée
- Routes sécurisées pour les admins
- Documentation Swagger automatique
- Authentification par session web
- Symfony Messenger pour les tâches asynchrones
- Queues pour les notifications
- Traitement en arrière-plan
- Interface de monitoring des messages
- Framework : Symfony 7.x
- Base de données : MySQL
- API : API Platform
- Authentification : Lexik JWT Bundle
- Messaging : Symfony Messenger
- Frontend : Bootstrap 5, Twig
- Tests : PHPUnit
- Fixtures : Doctrine Fixtures Bundle
- PHP 8.1+
- Composer
- MySQL 8.0+
- Symfony CLI (optionnel)
git clone https://github.com/votre-username/symfony-final-project.git
cd symfony-final-projectcomposer install# Copier le fichier d'environnement
cp .env .env.local
# Éditer .env.local avec vos paramètres
DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/final_project_courses?serverVersion=8.0.32&charset=utf8mb4"php bin/console lexik:jwt:generate-keypair# Créer la base de données
php bin/console doctrine:database:create
# Exécuter les migrations
php bin/console doctrine:migrations:migrate
# Charger les fixtures (données de test)
php bin/console doctrine:fixtures:loadsymfony server:start
# ou
php -S localhost:8000 -t public/# Dans un terminal séparé - pour traiter les messages asynchrones
php bin/console messenger:consume async
# Ou avec supervision pour redémarrage automatique
php bin/console messenger:consume async --time-limit=3600# Base de données
DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/final_project_courses"
# JWT
JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem
JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem
JWT_PASSPHRASE=votre_passphraseLes fixtures créent automatiquement des utilisateurs de test avec différents rôles :
| Mot de passe | Rôle | Points | |
|---|---|---|---|
admin@example.com |
admin123 |
ROLE_ADMIN | 5000 |
admin2@example.com |
admin123 |
ROLE_ADMIN | 3000 |
| Mot de passe | Rôle | Points | |
|---|---|---|---|
user1@example.com |
password123 |
ROLE_USER | 1500 |
user2@example.com |
password123 |
ROLE_USER | 2000 |
user3@example.com |
password123 |
ROLE_USER | 800 |
marie.dupont@example.com |
password123 |
ROLE_USER | 1200 |
jean.martin@example.com |
password123 |
ROLE_USER | 900 |
- 50 produits répartis dans différentes catégories
- Notifications pour tester le système
- Achats simulés avec historique
- Points distribués selon l'activité
- Accédez à
http://localhost:8000 - Connectez-vous avec un compte de test
- Explorez les fonctionnalités selon votre rôle
Email: admin@example.com
Mot de passe: admin123
Email: user1@example.com
Mot de passe: password123
- Connectez-vous en tant qu'admin sur le site web
- Cliquez sur "API Docs" dans la navigation
- Testez les routes directement dans l'interface
GET /api/produits/my-productsRetourne tous les produits créés par l'admin connecté.
GET /api/produits/{id}/my-productRetourne un produit spécifique créé par l'admin connecté.
L'API utilise la session web - pas besoin de token JWT séparé si vous êtes connecté sur le site.
{
"total": 2,
"products": [
{
"id": 1,
"nom": "Laptop Gaming",
"prix": 1500,
"category": "Informatique",
"description": "Ordinateur portable haute performance",
"createdAt": "2024-01-15 10:30:00",
"updatedAt": "2024-01-15 10:30:00",
"createdBy": {
"id": 1,
"nom": "Admin",
"prenom": "Super"
}
}
]
}php bin/phpunit# Tests des entités
php bin/phpunit tests/Entity/
# Tests des contrôleurs
php bin/phpunit tests/Controller/
# Tests de l'API
php bin/phpunit tests/Api/
# Tests des services
php bin/phpunit tests/Service/php bin/phpunit --coverage-html coverage/src/
├── Command/ # Commandes Symfony personnalisées
├── Controller/
│ ├── Admin/ # Contrôleurs administration
│ ├── Api/ # Contrôleurs API REST
│ └── ... # Contrôleurs publics
├── Entity/ # Entités Doctrine
├── EventListener/ # Event listeners
├── Repository/ # Repositories Doctrine
├── Security/ # Authentificateurs personnalisés
└── Service/ # Services métier
tests/
├── Api/ # Tests API
├── Controller/ # Tests contrôleurs
├── Entity/ # Tests entités
└── Service/ # Tests services
config/
├── packages/ # Configuration des bundles
├── routes/ # Configuration des routes
└── jwt/ # Clés JWT
templates/ # Templates Twig
public/ # Assets publics
- Notifications automatiques lors des actions importantes
- Interface de gestion pour les admins
- Types personnalisables
- Points gagnés lors d'activités
- Dépense de points pour les achats
- Historique des transactions
- Messages asynchrones : Traitement en arrière-plan des notifications
- Queues configurables : Transport sync/async selon les besoins
- Monitoring : Interface admin pour surveiller les messages
- Retry automatique : Gestion intelligente des échecs
- Types de messages :
NotificationMessage: Envoi de notificationsProductCreatedMessage: Actions post-création de produitUserStatusChangedMessage: Changements de statut utilisateur
# Consommer les messages en attente
php bin/console messenger:consume async
# Voir les messages échoués
php bin/console messenger:failed:show
# Relancer les messages échoués
php bin/console messenger:failed:retry
# Statistiques des transports
php bin/console messenger:stats- Hachage sécurisé des mots de passe
- Protection CSRF
- Validation des données
- Contrôle d'accès granulaire
- Fork le projet
- Créez une branche pour votre fonctionnalité
- Committez vos changements
- Pushez vers la branche
- Ouvrez une Pull Request
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
- Symfony pour le framework
- API Platform pour l'API REST
- Bootstrap pour l'interface utilisateur
💡 Conseil : Ce projet est conçu à des fins pédagogiques. N'hésitez pas à explorer le code, modifier les fonctionnalités et l'adapter à vos besoins !
🐛 Bug ou question ? Ouvrez une issue !****