Ce que vous allez apprendre
Programme de la formation
Module 1 : Introduction à Laravel
Qu'est-ce que Laravel ?
Laravel est un framework PHP open-source conçu pour développ...
Pourquoi utiliser Laravel ?
Syntaxe claire et élégante, productivité élevée, ORM puissan...
À qui s'adresse Laravel ?
Développeurs PHP, freelances, agences, entreprises, formateu...
Outils nécessaires
PHP >= 8.1, Composer, serveur local (XAMPP/Laragon), éditeur...
Installation de Laravel
Installer via Composer ou Laravel Installer. Configuration d...
Structure d'un projet Laravel
Découverte de l'arborescence : app/, routes/, resources/, da...
Lancer l'application localement
php artisan serve pour démarrer un serveur local sur http://...
Module 2 : Architecture de Laravel
Introduction à l'architecture MVC
Modèle-Vue-Contrôleur : séparation des responsabilités pour...
Le modèle MVC expliqué
Modèle gère les données, Vue affiche l'interface, Contrôleur...
Les routes dans Laravel
Définition des routes dans routes/web.php et routes/api.php
Les contrôleurs
Créer et utiliser des contrôleurs pour gérer la logique méti...
Les vues avec Blade
Moteur de template Blade pour créer des interfaces dynamique...
Les middlewares
Filtres HTTP pour sécuriser et contrôler l'accès aux routes.
Les Service Providers
Initialisation des fonctionnalités Laravel au démarrage.
Les Facades
Interface statique pour accéder aux services du container.
Module 3 : Les routes et les contrôleurs
Introduction aux routes Laravel
Points d'entrée définissant comment Laravel répond aux requê...
Créer une route simple
Route::get, Route::post et fonctions anonymes.
Types de routes
GET, POST, PUT, PATCH, DELETE, match, any.
Routes avec paramètres
Paramètres obligatoires et facultatifs dans les URL.
Nommer une route
Utiliser name() pour référencer facilement les routes.
Routes vers un contrôleur
Envoyer les requêtes vers des méthodes de contrôleur.
Créer un contrôleur
php artisan make:controller pour générer un contrôleur.
Exemple de contrôleur simple
Créer des méthodes pour gérer différentes actions.
Groupe de routes
Grouper par middleware, préfixe ou nom.
Routes avec nom et middleware
Combiner nommage et protection des routes.
Ressources CRUD automatiques
Route::resource pour générer 7 routes CRUD.
Routes API
Définir des routes API dans routes/api.php
Module 4 : Les vues avec Blade
Introduction à Blade
Moteur de template intégré pour générer du HTML dynamique.
Créer une vue Blade
Fichiers .blade.php dans resources/views/.
Passer des données à une vue
Utiliser view() et compact() pour transmettre des variables.
Syntaxe Blade - Conditions
@if, @else, @elseif, @unless pour les conditions.
Syntaxe Blade - Boucles
@foreach, @for, @while, @forelse pour itérer.
Layouts et sections
@extends, @section, @yield pour créer des templates.
Inclure une vue partielle
@include pour réutiliser des composants.
Affichage conditionnel
@switch, @case pour gérer plusieurs conditions.
Afficher des données brutes
{!! !!} pour désactiver l'échappement HTML.
Ajouter CSS/JS dans Blade
Utiliser asset() pour lier les fichiers statiques.
Afficher erreurs et messages flash
@error, session()->flash() pour les notifications.
Module 5 : Gestion des bases de données
Introduction aux bases de données
Migrations, Eloquent ORM, Seeders et Factories.
Configuration .env
Configurer la connexion à MySQL/PostgreSQL.
Les migrations
Créer et modifier des tables avec php artisan migrate.
Types de colonnes
string, text, integer, boolean, timestamps, etc.
Eloquent ORM - Le Modèle
Créer des modèles pour représenter les tables.
CRUD avec Eloquent
Create, Read, Update, Delete avec Eloquent.
Relations hasOne/belongsTo
Relations 1 à 1 entre modèles.
Relations hasMany
Relations 1 à N (un utilisateur a plusieurs articles).
Relations belongsToMany
Relations N à N avec tables pivot.
Les Seeders
Peupler la base avec des données initiales.
Les Factories
Générer des données aléatoires pour les tests.
Module 6 : Formulaires et validation
Introduction aux formulaires
Créer des formulaires interactifs avec Laravel.
Créer un formulaire HTML
Utiliser Blade pour créer des formulaires.
Récupérer les données
Request::all() et $request->input().
Valider les données
validate() pour sécuriser les entrées utilisateur.
Règles de validation
required, min, max, email, unique, confirmed, etc.
Gérer les erreurs de validation
@error et $errors pour afficher les messages.
Personnaliser les messages
Modifier les textes d'erreur par défaut.
Form Request Classes
Créer des classes dédiées pour la validation.
Messages de succès
Flash messages pour notifier l'utilisateur.
Protection CSRF
@csrf pour sécuriser les formulaires.
Module 7 : Authentification et sécurité
Introduction à l'authentification
Système complet : inscription, connexion, réinitialisation.
Solutions disponibles
Breeze, Jetstream, UI, Fortify, Sanctum.
Installer Laravel Breeze
Auth simple avec Blade en quelques commandes.
Middleware auth
Protéger les routes avec middleware('auth').
Afficher l'utilisateur connecté
Auth::user() et @auth dans les vues.
Connexion/Déconnexion
Auth::attempt() et Auth::logout().
Middleware guest
Pages accessibles uniquement aux non-connectés.
Ajouter un rôle
Colonne role et middleware personnalisé.
Protection CSRF
Token automatique dans les formulaires.
Hachage des mots de passe
bcrypt avec Hash::make() et Hash::check().
Protection XSS
Échappement automatique avec {{ }}.
Module 8 : API REST avec Laravel
Introduction aux API
Fournir des données JSON pour apps mobiles et SPA.
Différences Web vs API
Stateless, JSON, routes/api.php.
Créer une route API
Définir dans routes/api.php avec préfixe /api.
Créer un contrôleur API
Retourner des réponses JSON structurées.
Réponses JSON
response()->json() avec codes HTTP appropriés.
API Resources
Formater les données avec des classes Resource.
Authentification Sanctum
Authentification par tokens sécurisés.
Générer un token
createToken() pour authentifier les API.
Protéger les routes API
Middleware auth:sanctum.
Appel API avec token
Header Authorization: Bearer {token}.
Module 9 : Téléversement de fichiers
Introduction aux uploads
Gérer l'upload de fichiers simplement.
Formulaire de téléversement
enctype='multipart/form-data' obligatoire.
Récupérer et stocker
$request->file() et store().
Stockage public
storage/app/public et lien symbolique.
Configurer le disque
FILESYSTEM_DISK dans .env.
Nom unique de fichier
storeAs() pour personnaliser le nom.
Afficher un fichier
asset('storage/fichier.jpg').
Supprimer un fichier
Storage::delete().
Validation des fichiers
file, image, mimes, max pour valider.
Stockage Amazon S3
Configuration pour cloud storage.
Module 10 : Notifications et mails
Introduction aux notifications
Envoyer emails, SMS, notifications database.
Configuration SMTP
Configurer .env pour l'envoi d'emails.
Envoi email simple
Créer une classe Mailable.
Vue Blade email
Template HTML pour les emails.
Envoyer depuis contrôleur
Mail::to()->send().
Utiliser les notifications
Système multicanaux (mail, database, Slack).
Notifications database
Stocker notifications dans la BDD.
Lire les notifications
$user->notifications et markAsRead().
Files d'attente (Jobs)
Envoi asynchrone avec queues.
Tester avec Mailtrap
Service de test d'emails.
Module 11 : Système de commentaires
Introduction aux commentaires
Relations One to Many pour les commentaires.
Modèle Article existant
Prérequis : table articles.
Modèle Commentaire
Migration avec article_id et user_id.
Relations entre modèles
hasMany() et belongsTo().
Formulaire de commentaire
Créer un form pour ajouter un commentaire.
Route et contrôleur
CommentaireController@store.
Afficher les commentaires
@foreach dans la vue article.
Eager Loading
with('commentaires') pour éviter N+1.
Relations polymorphes
Commentaires sur plusieurs modèles.
Module 12 : Filtres, recherches et pagination
Introduction
Chercher, filtrer et paginer efficacement.
Pagination de base
paginate() et liens automatiques.
Personnaliser la pagination
Changer le nombre d'éléments et le style.
Recherche par mot-clé
where('titre', 'like', '%search%').
Filtres par catégorie
when() pour filtres conditionnels.
Trier les résultats
orderBy() dynamique.
Pagination avec Livewire
Pagination sans rechargement de page.
Exemple complet combiné
Recherche + Filtre + Tri + Pagination.
Module 13 : Rôles et autorisations (Gates & Policies)
Introduction
Contrôler les permissions utilisateurs.
Les Gates
Règles globales pour vérifications simples.
Utiliser Gates
Gate::allows() et @can dans Blade.
Les Policies
Autorisations liées à des modèles.
Créer une Policy
php artisan make:policy ArticlePolicy.
Enregistrer la Policy
AuthServiceProvider configuration.
Utiliser dans contrôleur
$this->authorize().
Utiliser dans Blade
@can('update', $article).
Rôles en base de données
Colonne role pour gérer les permissions.
Bloquer l'accès aux routes
Middleware can:action,model.
Module 14 : Laravel + Vue.js/React (SPA)
Introduction aux SPA
Backend Laravel + Frontend JS.
Inertia.js c'est quoi ?
Pont entre Laravel et Vue/React.
Installer Inertia + Vue
Laravel Breeze avec Inertia stack.
Structure des vues
resources/js/Pages/ au lieu de views.
Routes Inertia
Inertia::render() avec props.
Authentification Inertia
Login, Register, Reset intégrés.
API REST classique
Frontend séparé consommant l'API.
Gérer le CORS
Configuration Cross-Origin.
Choisir Inertia vs API
Comparaison et cas d'usage.
Module 15 : Tests automatisés (PHPUnit)
Introduction aux tests
Tests unitaires, fonctionnels et navigateur.
Types de tests
Unit, Feature, Browser (Dusk).
Écrire un test unitaire
php artisan make:test --unit.
Exécuter les tests
php artisan test.
Tester une route
$this->get() et assertStatus().
Tester avec utilisateur
$this->actingAs($user).
Factories pour tests
User::factory()->create().
Tests d'API
assertJson() et assertJsonStructure().
Bonnes pratiques
RefreshDatabase, nommage clair.
Laravel Dusk
Tests de navigateur bout en bout.
Module 16 : Déploiement en production
Introduction au déploiement
Rendre l'app accessible sur Internet.
Prérequis du serveur
PHP 8.1+, MySQL, Composer, Nginx.
Méthodes de déploiement
Git, CI/CD, Forge, Vapor.
Cloner le projet
git clone sur le serveur.
Installer dépendances
composer install --no-dev.
Configurer .env
APP_ENV=production, APP_DEBUG=false.
Générer la clé
php artisan key:generate.
Permissions
chmod 755, chown www-data.
Compiler les assets
npm run build.
Migrer la BDD
php artisan migrate --force.
Configurer Nginx
Virtual host et redirection.
Activer HTTPS
Certbot et Let's Encrypt.
Sécuriser Laravel
Protéger .env, routes admin.
GitHub Actions
Automatiser le déploiement.
Module 17 : Laravel Livewire
Introduction à Livewire
Composants dynamiques sans JavaScript.
Installation Livewire
composer require livewire/livewire.
Créer un composant
php artisan make:livewire Compteur.
Compteur interactif
wire:click pour actions.
Two-Way Binding
wire:model pour formulaires.
Formulaire en temps réel
ContactForm avec validation.
Filtrage dynamique
Liste filtrée en temps réel.
Bonnes pratiques
wire:model.defer, wire:loading.
Pagination Livewire
WithPagination trait.
Livewire + Alpine.js
Combiner pour effets frontend.
Module 18 : API REST - Avancé
Introduction API propre
Construire une API professionnelle.
Créer projet API
Laravel API-only ou routes/api.php.
Routes API
Préfixe /api et middleware api.
Contrôleur API
Retourner JSON avec codes HTTP.
API Resources
Formater proprement avec Resources.
Sécuriser avec Sanctum
Authentification par tokens.
Générer un token
createToken() pour utilisateur.
Appel API avec token
Authorization Bearer header.
Bonnes pratiques API
Codes HTTP, validation, versionnement.
Pagination dans API
Meta data automatique.
Tester avec Postman
Thunder Client ou Postman.
Module 19 : WebSockets & temps réel (Laravel Echo)
Introduction WebSockets
Communication bidirectionnelle temps réel.
Cas d'usage
Chat, notifications, dashboard live.
Installer Laravel Echo
npm install + Pusher/Socket.IO.
Configuration Pusher
BROADCAST_DRIVER=pusher dans .env.
Créer événement broadcastable
implements ShouldBroadcast.
Déclencher l'événement
event(new MessageEnvoye()).
Installer Echo côté frontend
Laravel Echo + Pusher JS.
Écouter les événements
Echo.channel().listen().
Notifications broadcast
via(['broadcast', 'database']).
Laravel Websockets
Alternative self-hosted à Pusher.
Canaux privés
Sécuriser avec routes/channels.php.
Module 20 : Laravel Jetstream
Qu'est-ce que Jetstream ?
Starter kit avancé avec 2FA, équipes.
Installation
composer require laravel/jetstream.
Choisir Livewire ou Inertia
php artisan jetstream:install livewire.
Fonctionnalités incluses
Auth, 2FA, sessions, API tokens.
Double authentification 2FA
Google Authenticator intégré.
Gestion sessions actives
Déconnecter appareils distants.
API Tokens Sanctum
Créer tokens pour apps mobiles.
Gestion des équipes
Créer organisations multi-utilisateurs.
Middleware Jetstream
auth, verified, password.confirm.
Interface utilisateur
Tailwind CSS personnalisable.
Alternatives à Jetstream
Breeze, UI, Fortify.
Module 21 : Laravel Horizon
Introduction à Horizon
Supervision des files d'attente.
Pourquoi les queues ?
Déléguer tâches longues aux workers.
Installation Horizon
composer require laravel/horizon.
Configuration
QUEUE_CONNECTION=redis dans .env.
Lancer Horizon
php artisan horizon.
Interface Horizon
Dashboard /horizon en temps réel.
Créer un Job
php artisan make:job EnvoyerEmail.
Déclencher un job
dispatch(new EnvoyerEmail()).
Workers avec supervisor
Production avec supervisor Linux.
Prioriser les queues
emails, notifications, default.
Failed Jobs
Rejouer avec artisan queue:retry.
Notifications anomalies
Alertes sur échecs ou lenteurs.
Module 22 : Laravel Scout (Recherche avancée)
Introduction à Scout
Recherche full-text avec Algolia/Meilisearch.
Installation Scout
composer require laravel/scout.
Choisir un moteur
Algolia (SaaS) ou Meilisearch (open source).
Configuration Algolia
ALGOLIA_APP_ID et ALGOLIA_SECRET.
Configuration Meilisearch
Installation locale et MEILISEARCH_HOST.
Rendre modèle searchable
use Searchable trait.
Indexer les données
php artisan scout:import.
Effectuer une recherche
Article::search('laravel')->get().
Recherche dans frontend
Intégrer avec Livewire ou Vue.
Pagination Scout
search()->paginate().
Filtres avancés
where() avec Scout.
Synchronisation auto
Indexation automatique sur save/delete.