Plateforme de Formation
Une application Laravel complète pour gérer des cours en ligne avec modules, leçons, inscriptions d'étudiants, suivi de progression et gestion de ressources.
Schéma de Base de Données
Structure des tables et relations pour notre application
plaintext
┌─────────────────────────────────────────────────────────────┐
│ PLATEFORME DE FORMATION │
└─────────────────────────────────────────────────────────────┘
users
├── id
├── name
├── email
├── password
├── role (student, instructor, admin)
└── timestamps
courses
├── id
├── title
├── slug (unique)
├── description
├── objectives
├── level (beginner, intermediate, advanced)
├── duration_hours
├── thumbnail
├── is_published
├── instructor_id → users.id
└── timestamps
modules
├── id
├── course_id → courses.id
├── title
├── description
├── order
└── timestamps
lessons
├── id
├── module_id → modules.id
├── title
├── content
├── type (video, text, quiz)
├── video_url
├── duration_minutes
├── order
├── is_free
└── timestamps
enrollments (pivot)
├── id
├── user_id → users.id
├── course_id → courses.id
├── enrolled_at
├── completed_at
├── progress_percentage
└── timestamps
lesson_user (pivot)
├── id
├── user_id → users.id
├── lesson_id → lessons.id
├── is_completed
├── completed_at
├── time_spent_seconds
└── timestamps
resources
├── id
├── lesson_id → lessons.id
├── title
├── description
├── file_path
├── file_type
├── file_size
├── download_count
└── timestamps
┌─────────────────────────────────────────────────────────────┐
│ RELATIONS │
└─────────────────────────────────────────────────────────────┘
Course → hasMany → Module
Module → belongsTo → Course
Module → hasMany → Lesson
Lesson → belongsTo → Module
Course → belongsToMany → User (via enrollments)
User → belongsToMany → Course (via enrollments)
User → belongsToMany → Lesson (via lesson_user)
Lesson → belongsToMany → User (via lesson_user)
Course → hasManyThrough → Lesson (via Module)Fonctionnalités Publiques
- ✓ Liste des cours disponibles
- ✓ Détails d'un cours avec modules et leçons
- ✓ Prévisualisation des leçons gratuites
- ✓ Recherche et filtrage par niveau
Espace Étudiant
- → Dashboard avec progression
- → Inscription aux cours
- → Lecture des leçons
- → Téléchargement des ressources
- → Suivi de progression par cours
Espace Instructeur
- → Créer et gérer ses cours
- → Ajouter des modules et leçons
- → Upload de ressources
- → Statistiques d'inscription
Espace Administrateur
- → Gestion de tous les cours
- → Gestion des utilisateurs
- → Statistiques globales
- → Modération du contenu
Stack Technique
Backend
- Laravel 10.x
- PHP 8.1+
- MySQL / PostgreSQL
- Eloquent ORM
- Laravel Breeze (Auth)
Frontend
- Blade Templates
- Tailwind CSS
- Alpine.js (optionnel)
- Livewire (optionnel)
Structure des Routes
php
<?php
// Routes publiques
Route::get('/', [HomeController::class, 'index'])->name('home');
Route::get('/cours', [CourseController::class, 'index'])->name('courses.index');
Route::get('/cours/{course:slug}', [CourseController::class, 'show'])->name('courses.show');
// Authentification
Route::middleware('guest')->group(function () {
Route::get('/register', [RegisterController::class, 'create'])->name('register');
Route::post('/register', [RegisterController::class, 'store']);
Route::get('/login', [LoginController::class, 'create'])->name('login');
Route::post('/login', [LoginController::class, 'store']);
});
Route::post('/logout', [LoginController::class, 'destroy'])->middleware('auth')->name('logout');
// Espace Étudiant
Route::middleware(['auth', 'role:student'])->prefix('etudiant')->name('student.')->group(function () {
Route::get('/dashboard', [StudentController::class, 'dashboard'])->name('dashboard');
Route::get('/mes-cours', [StudentController::class, 'courses'])->name('courses');
Route::post('/cours/{course}/inscription', [EnrollmentController::class, 'enroll'])->name('enroll');
Route::get('/cours/{course}/lecon/{lesson}', [LessonController::class, 'show'])->name('lesson');
Route::post('/lecon/{lesson}/complete', [ProgressController::class, 'markComplete'])->name('lesson.complete');
});
// Espace Instructeur
Route::middleware(['auth', 'role:instructor'])->prefix('instructeur')->name('instructor.')->group(function () {
Route::resource('courses', InstructorCourseController::class);
Route::resource('courses.modules', ModuleController::class)->shallow();
Route::resource('modules.lessons', LessonController::class)->shallow();
});
// Espace Admin
Route::middleware(['auth', 'role:admin'])->prefix('admin')->name('admin.')->group(function () {
Route::get('/dashboard', [AdminController::class, 'dashboard'])->name('dashboard');
Route::resource('users', UserController::class);
Route::resource('courses', AdminCourseController::class);
});Prêt à construire ce projet ?
Suivez le cours étape par étape pour créer cette plateforme de formation complète
Commencer le Chapitre 1