Introduction à Laravel
30 minLaravel 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éé ?
Installation et Configuration
1hPour 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.
Laragon Full
Serveur WAMP/MAMP portable avec Apache, MySQL, PHP.
Composer
Gestionnaire de dépendances PHP pour Laravel.
VS Code
Éditeur de code avec extensions PHP/Laravel.
PostgreSQL
Système de base de données relationnel puissant.
EXERCICE 1 : Installation de l'environnement
- Téléchargez et installez Laragon Full avec les options par défaut.
- Lancez Laragon et assurez-vous qu'Apache et MySQL sont démarrés.
- Cliquez sur "Menu > PHP > Extensions" et activez
pdo_pgsqletpgsql. - Installez Composer en suivant les instructions officielles.
- Installez PostgreSQL et notez votre mot de passe administrateur.
- 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.
Premiers Pas avec Laravel
1h30Maintenant que notre environnement est prêt, créons notre premier projet Laravel et explorons sa structure.
EXERCICE 2 : Création du projet
- Ouvrez le terminal de Laragon (Menu > Terminal).
- Naviguez vers le répertoire www avec la commande :
cd www - Créez un nouveau projet Laravel avec :
composer create-project laravel/laravel task-app - Attendez la fin de l'installation (cela peut prendre plusieurs minutes).
- Démarrez le serveur de développement avec :
cd task-apppuisphp artisan serve - Ouvrez votre navigateur à l'adresse
http://localhost:8000pour 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.
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
Base de Données et Migrations
1hPostgreSQL est un système de base de données puissant et rigoureux. Configurons-le pour notre application Laravel.
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
- Générez un modèle Task avec sa migration :
php artisan make:model Task -m - Ouvrez le fichier de migration dans
database/migrations/ - Modifiez la méthode up() pour ajouter les colonnes nécessaires
- Exécutez la migration :
php artisan migrate - Vérifiez que la table a bien été créée dans PostgreSQL
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 ?
Routes et Contrôleurs
1hLes routes définissent les URL de votre application et les associent à des contrôleurs qui contiennent la logique métier.
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
- Créez un contrôleur pour les tâches :
php artisan make:controller TaskController --resource - Ouvrez le fichier
app/Http/Controllers/TaskController.php - Implémentez la méthode index() pour retourner toutes les tâches
- Ajoutez les routes nécessaires dans
routes/web.php - 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);
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'));
}
Vues et Templates Blade
1h30Blade 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
- Créez un dossier layouts dans
resources/views - Créez un fichier
app.blade.phpdans ce dossier - Créez un dossier
tasksdansresources/views - Créez un fichier
index.blade.phppour afficher les tâches - Utilisez les directives @extends, @section et @yield pour structurer vos vues
<!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>
@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.
CRUD Complet
45 minCRUD 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
- Complétez les méthodes create() et store() dans TaskController
- Créez la vue create.blade.php avec un formulaire
- Implémentez les méthodes edit() et update() pour la modification
- Ajoutez la méthode destroy() pour la suppression
- Ajoutez la validation des données avec les Form Requests
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 !');
}
@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.
Déploiement et Ressources
15 minMaintenant que votre application est fonctionnelle, voici quelques conseils pour la déployer et continuer à apprendre.
Déploiement
Guide officiel pour déployer Laravel.
Eloquent ORM
Documentation sur l'ORM de Laravel.
Laravel News
Actualités et tutoriels sur Laravel.
Laracasts
Vidéos de formation sur Laravel.
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.