Progression:
Matin
00

Introduction à Laravel

30 min

Laravel est un framework PHP élégant qui simplifie le développement web en fournissant une structure solide et des outils puissants. Créé par Taylor Otwell en 2011, il est devenu l'un des frameworks PHP les plus populaires.

Architecture MVC

Séparation claire entre Modèle, Vue et Contrôleur.

Écosystème Riche

Composer, Artisan, Eloquent, et bien plus.

Sécurité Intégrée

Protection CSRF, hashage, validation native.

Performance

Optimisation, cache, et système de files d'attente.

Pourquoi Laravel ?

Laravel se distingue par sa syntaxe expressive, sa documentation complète et sa communauté active. Il permet de développer rapidement des applications robustes tout en gardant un code propre et maintenable.

Quiz : Connaissances de base

Quelle année Laravel a-t-il été créé ?

01

Installation et Configuration

1h

Pour commencer avec Laravel, nous devons préparer notre environnement de développement. Nous utiliserons Laragon comme serveur local, PostgreSQL comme base de données, et VS Code comme éditeur.

EXERCICE 1 : Installation de l'environnement

  1. Téléchargez et installez Laragon Full avec les options par défaut.
  2. Lancez Laragon et assurez-vous qu'Apache et MySQL sont démarrés.
  3. Cliquez sur "Menu > PHP > Extensions" et activez pdo_pgsql et pgsql.
  4. Installez Composer en suivant les instructions officielles.
  5. Installez PostgreSQL et notez votre mot de passe administrateur.
  6. Installez VS Code et ajoutez les extensions : PHP Intelephense, Laravel Blade Snippets, et GitLens.
Important !

Pour vérifier que Composer est bien installé, ouvrez un terminal (CMD) et tapez composer --version. Vous devriez voir la version installée.

02

Premiers Pas avec Laravel

1h30

Maintenant que notre environnement est prêt, créons notre premier projet Laravel et explorons sa structure.

EXERCICE 2 : Création du projet

  1. Ouvrez le terminal de Laragon (Menu > Terminal).
  2. Naviguez vers le répertoire www avec la commande : cd www
  3. Créez un nouveau projet Laravel avec : composer create-project laravel/laravel task-app
  4. Attendez la fin de l'installation (cela peut prendre plusieurs minutes).
  5. Démarrez le serveur de développement avec : cd task-app puis php artisan serve
  6. Ouvrez votre navigateur à l'adresse http://localhost:8000 pour voir la page d'accueil de Laravel.

Structure d'un projet Laravel

app

Logique métier, modèles, contrôleurs.

routes

Définition des routes de l'application.

resources/views

Fichiers de template Blade.

database

Migrations, seeders, factories.

Astuce de pro

Utilisez la commande php artisan --help pour découvrir toutes les commandes disponibles. La commande php artisan make: est particulièrement utile pour générer du code rapidement.

# Quelques commandes Artisan essentielles
php artisan serve # Démarrer le serveur de développement
php artisan make:controller Name # Créer un contrôleur
php artisan make:model Name -m # Créer un modèle avec migration
php artisan make:migration name # Créer une migration
php artisan route:list # Lister toutes les routes
03

Base de Données et Migrations

1h

PostgreSQL est un système de base de données puissant et rigoureux. Configurons-le pour notre application Laravel.

# Configuration de la base de données dans .env
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
# Nom de votre base de données
DB_DATABASE=task_db
DB_USERNAME=postgres
DB_PASSWORD=votre_mot_de_passe_postgres
Important !

Créez manuellement la base de données task_db dans PostgreSQL avant d'exécuter les migrations. Vous pouvez utiliser pgAdmin ou la ligne de commande : CREATE DATABASE task_db;

Création de notre première table

EXERCICE 3 : Création de la table des tâches

  1. Générez un modèle Task avec sa migration : php artisan make:model Task -m
  2. Ouvrez le fichier de migration dans database/migrations/
  3. Modifiez la méthode up() pour ajouter les colonnes nécessaires
  4. Exécutez la migration : php artisan migrate
  5. Vérifiez que la table a bien été créée dans PostgreSQL
// database/migrations/xxxx_create_tasks_table.php
Schema::create('tasks', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->text('description')->nullable();
    $table->boolean('is_completed')->default(false);
    $table->date('due_date')->nullable();
    $table->timestamps();
});

Quiz : Migrations

Quelle commande permet d'annuler la dernière migration ?

04

Routes et Contrôleurs

1h

Les routes définissent les URL de votre application et les associent à des contrôleurs qui contiennent la logique métier.

// routes/web.php
use App\Http\Controllers\TaskController;

// Route pour afficher toutes les tâches
Route::get('/tasks', [TaskController::class, 'index'])->name('tasks.index');

// Route pour afficher le formulaire de création
Route::get('/tasks/create', [TaskController::class, 'create'])->name('tasks.create');

// Route pour enregistrer une nouvelle tâche
Route::post('/tasks', [TaskController::class, 'store'])->name('tasks.store');

// Route pour afficher une tâche spécifique
Route::get('/tasks/{task}', [TaskController::class, 'show'])->name('tasks.show');

EXERCICE 4 : Création du contrôleur de tâches

  1. Créez un contrôleur pour les tâches : php artisan make:controller TaskController --resource
  2. Ouvrez le fichier app/Http/Controllers/TaskController.php
  3. Implémentez la méthode index() pour retourner toutes les tâches
  4. Ajoutez les routes nécessaires dans routes/web.php
  5. Testez avec la commande php artisan route:list
Astuce : Resource Routes

Laravel propose des routes "resource" qui génèrent automatiquement toutes les routes CRUD pour un contrôleur : Route::resource('tasks', TaskController::class);

// app/Http/Controllers/TaskController.php
use App\Models\Task;

public function index() {
    // Récupérer toutes les tâches via Eloquent
    $tasks = Task::all();

    // Envoyer à la vue
    return view('tasks.index', compact('tasks'));
}
05

Vues et Templates Blade

1h30

Blade est le moteur de templates de Laravel. Il permet de créer des vues dynamiques avec une syntaxe simple et expressive.

Création d'un layout principal

EXERCICE 5 : Mise en place de Blade

  1. Créez un dossier layouts dans resources/views
  2. Créez un fichier app.blade.php dans ce dossier
  3. Créez un dossier tasks dans resources/views
  4. Créez un fichier index.blade.php pour afficher les tâches
  5. Utilisez les directives @extends, @section et @yield pour structurer vos vues
{{-- resources/views/layouts/app.blade.php --}}
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>@yield('title', 'Application de Tâches')</title>
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
  <nav class="navbar navbar-dark bg-dark">
    <div class="container">
      <a class="navbar-brand" href="{{ route('tasks.index') }}">Gestionnaire de Tâches</a>
    </div>
  </nav>

  <div class="container mt-4">
    @include('partials.flash')
    @yield('content')
  </div>

  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
{{-- resources/views/tasks/index.blade.php --}}
@extends('layouts.app')

@section('title', 'Liste des Tâches')

@section('content')
  <div class="d-flex justify-content-between align-items-center mb-4">
    <h1>Mes Tâches</h1>
    <a href="{{ route('tasks.create') }}" class="btn btn-primary">Ajouter une tâche</a>
  </div>

  @if($tasks->count())
    <div class="row">
      @foreach($tasks as $task)
        <div class="col-md-4 mb-3">
          <div class="card {{ $task->is_completed ? 'bg-light' : '' }}">
            <div class="card-body">
              <h5 class="card-title {{ $task->is_completed ? 'text-decoration-line-through' : '' }}">{{ $task->title }}</h5>
              @if($task->description)
                <p class="card-text">{{ $task->description }}</p>
              @endif
              <div class="d-flex justify-content-between">
                <small class="text-muted">Créé le {{ $task->created_at->format('d/m/Y') }}</small>
                <div>
                  <a href="{{ route('tasks.edit', $task) }}" class="btn btn-sm btn-outline-primary">Modifier</a>
                  <form action="{{ route('tasks.destroy', $task) }}" method="POST" class="d-inline">
                    @csrf
                    @method('DELETE')
                    <button type="submit" class="btn btn-sm btn-outline-danger">Supprimer</button>
                  </form>
                </div>
              </div>
            </div>
        </div>
      @endforeach
    </div>
  @else
    <div class="alert alert-info">Aucune tâche trouvée. <a href="{{ route('tasks.create') }}">Créez votre première tâche !</a></div>
  @endif
@endsection
Directives Blade utiles

Blade offre de nombreuses directives pour simplifier votre code : @if/@else/@endif, @foreach/@endforeach, @include, @csrf, @method, etc.

06

CRUD Complet

45 min

CRUD signifie Create, Read, Update, Delete. Ce sont les quatre opérations de base pour la gestion de données.

EXERCICE 6 : Implémentation du CRUD

  1. Complétez les méthodes create() et store() dans TaskController
  2. Créez la vue create.blade.php avec un formulaire
  3. Implémentez les méthodes edit() et update() pour la modification
  4. Ajoutez la méthode destroy() pour la suppression
  5. Ajoutez la validation des données avec les Form Requests
// app/Http/Controllers/TaskController.php
public function store(Request $request) {
    // Validation des données
    $validated = $request->validate([
      'title' => 'required|max:255',
      'description' => 'nullable',
      'due_date' => 'nullable|date',
    ]);

    // Création de la tâche
    $task = Task::create($validated);

    // Redirection avec message de succès
    return redirect()->route('tasks.index')->with('success', 'Tâche créée avec succès !');
}
{{-- resources/views/tasks/create.blade.php --}}
@extends('layouts.app')

@section('title', 'Créer une Tâche')

@section('content')
  <h1>Créer une nouvelle tâche</h1>

  <form action="{{ route('tasks.store') }}" method="POST">
    @csrf

    <div class="mb-3">
      <label for="title" class="form-label">Titre</label>
      <input type="text" class="form-control @error('title') is-invalid @enderror"
        id="title" name="title" value="{{ old('title') }}" required>
      @error('title')
        <div class="invalid-feedback">{{ $message }}</div>
      @enderror
    </div>

    <div class="mb-3">
      <label for="description" class="form-label">Description</label>
      <textarea class="form-control" id="description" name="description" rows="3">{{ old('description') }}</textarea>
    </div>

    <div class="mb-3">
      <label for="due_date" class="form-label">Date d'échéance</label>
      <input type="date" class="form-control" id="due_date" name="due_date"
        value="{{ old('due_date') }}">
    </div>

    <button type="submit" class="btn btn-primary">Créer la tâche</button>
    <a href="{{ route('tasks.index') }}" class="btn btn-secondary">Annuler</a>
  </form>
@endsection
Validation avec Form Requests

Pour une meilleure organisation, vous pouvez créer des Form Requests avec php artisan make:request StoreTaskRequest et y déplacer votre logique de validation.

07

Déploiement et Ressources

15 min

Maintenant que votre application est fonctionnelle, voici quelques conseils pour la déployer et continuer à apprendre.

# Commandes pour la préparation au déploiement
composer install --optimize-autoloader --no-dev
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan migrate --force

Félicitations !

Vous avez maintenant une application Laravel fonctionnelle avec PostgreSQL, Bootstrap et un CRUD complet. Vous maîtrisez les bases de Laravel et êtes prêt à explorer des fonctionnalités plus avancées.