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