Guide complet du framework Laravel
DOG&DEV · 26/01/2025
Guide complet du framework Laravel
Laravel est un framework PHP moderne qui simplifie le développement web en automatisant les tâches répétitives. Ce guide complet couvre l'architecture MVC, Artisan CLI, Eloquent ORM, Blade, les fonctionnalités clés, les cas d'usage et les avantages par rapport aux alternatives.
Prérequis
- Connaissances de base en PHP
- Compréhension des concepts MVC (Model-View-Controller)
- Environnement de développement (PHP 8.1+, Composer)
Qu'est-ce que Laravel ?
Laravel est un framework PHP open-source créé par Taylor Otwell. Il suit le pattern MVC et offre :
- Routing élégant et expressif
- ORM Eloquent pour les bases de données
- Moteur de template Blade
- CLI Artisan pour l'automatisation
- Système d'authentification intégré
- Gestion des migrations de base de données
Architecture MVC de Laravel
Laravel suit le pattern Model-View-Controller :
Model (Modèle)
Gère les données et la logique métier. Les modèles Eloquent représentent les tables de base de données.
// app/Models/User.php
class User extends Model
{
protected $fillable = ['name', 'email', 'password'];
public function posts()
{
return $this->hasMany(Post::class);
}
}
View (Vue)
Gère la présentation. Blade est le moteur de template de Laravel.
{{-- resources/views/users/index.blade.php --}}
@foreach($users as $user)
<p>{{ $user->name }}</p>
@endforeach
Controller (Contrôleur)
Gère la logique de l'application et coordonne les modèles et les vues.
// app/Http/Controllers/UserController.php
class UserController extends Controller
{
public function index()
{
$users = User::all();
return view('users.index', compact('users'));
}
}
Artisan CLI : automatisation des tâches
Artisan est l'interface en ligne de commande de Laravel.
Commandes essentielles
# Créer un nouveau projet
composer create-project laravel/laravel mon-projet
# Lancer le serveur de développement
php artisan serve
# Créer un modèle
php artisan make:model Post
# Créer un contrôleur
php artisan make:controller PostController
# Créer une migration
php artisan make:migration create_posts_table
# Exécuter les migrations
php artisan migrate
# Créer un seeder
php artisan make:seeder PostSeeder
# Exécuter les seeders
php artisan db:seed
Commandes utiles
# Lister toutes les commandes
php artisan list
# Aide sur une commande
php artisan help migrate
# Vider le cache
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
# Mode maintenance
php artisan down
php artisan up
Eloquent ORM : gestion des bases de données
Eloquent transforme les tables de base de données en objets PHP.
Relations
// One-to-Many
class User extends Model
{
public function posts()
{
return $this->hasMany(Post::class);
}
}
// Many-to-Many
class Post extends Model
{
public function tags()
{
return $this->belongsToMany(Tag::class);
}
}
Requêtes Eloquent
// Récupérer tous les utilisateurs
$users = User::all();
// Avec conditions
$activeUsers = User::where('active', true)->get();
// Eager loading (évite N+1)
$users = User::with('posts')->get();
// Agrégations
$count = User::count();
$avg = Post::avg('views');
Pour les bonnes pratiques : laravel-best-practices.
Blade : moteur de template
Blade offre une syntaxe claire et puissante pour les vues.
Syntaxe de base
{{-- Variables --}}
{{ $name }}
{{-- Non échappé (HTML) --}}
{!! $htmlContent !!}
{{-- Structures conditionnelles --}}
@if($condition)
<p>Condition vraie</p>
@else
<p>Condition fausse</p>
@endif
{{-- Boucles --}}
@foreach($items as $item)
<p>{{ $item->name }}</p>
@endforeach
Héritage de templates
{{-- resources/views/layouts/app.blade.php --}}
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
@yield('content')
</body>
</html>
{{-- resources/views/pages/home.blade.php --}}
@extends('layouts.app')
@section('title', 'Accueil')
@section('content')
<h1>Bienvenue</h1>
@endsection
Pour les directives Blade avancées : blade-directives-laravel.
Fonctionnalités clés
Routing
// routes/web.php
Route::get('/', function () {
return view('welcome');
});
Route::get('/users', [UserController::class, 'index']);
Route::post('/users', [UserController::class, 'store']);
Route::resource('posts', PostController::class);
Middleware
Intercepte les requêtes avant qu'elles n'atteignent les contrôleurs :
// Authentification
Route::middleware('auth')->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index']);
});
Validation
$validated = $request->validate([
'email' => 'required|email|unique:users',
'password' => 'required|min:8',
]);
Authentification
Laravel inclut un système d'authentification complet :
php artisan make:auth
Pour la sécurité : laravel-security-checklist.
Cas d'usage
Applications web classiques
- Sites vitrine avec gestion de contenu
- Blogs et CMS
- Portfolios interactifs
Applications métier
- CRM et gestion de clients
- Outils de gestion de projet
- Plateformes e-learning
APIs REST
Laravel excelle pour créer des APIs REST :
Route::apiResource('posts', PostController::class);
Pour les APIs : laravel-api-inspector.
E-commerce
- Boutiques en ligne (avec packages comme Laravel Cashier)
- Gestion de commandes et inventaire
- Systèmes de paiement
Avantages de Laravel
Productivité
- Syntaxe expressive et intuitive
- Documentation excellente et communauté active
- Écosystème riche (packages Composer)
Sécurité
- Protection CSRF intégrée
- Validation des entrées
- Protection SQL injection via Eloquent
- Chiffrement des données sensibles
Pour éviter les erreurs : laravel-security-mistakes.
Évolutivité
- Architecture modulaire
- Support des queues pour les tâches asynchrones
- Cache intégré (Redis, Memcached)
- Optimisations de requêtes (eager loading, pagination)
Comparaison avec d'autres frameworks
Laravel vs Symfony
- Laravel : plus opinionné, développement plus rapide
- Symfony : plus flexible, courbe d'apprentissage plus raide
Laravel vs CodeIgniter
- Laravel : moderne, fonctionnalités avancées intégrées
- CodeIgniter : plus léger, mais moins de fonctionnalités natives
Déploiement
Hébergement
Laravel peut être déployé sur :
- VPS : contrôle total, performance optimale
- Hébergement partagé : possible mais limité
- Cloud : scalable (AWS, DigitalOcean, etc.)
Pour Plesk : laravel-plesk-website.
Configuration production
# Optimiser pour la production
php artisan config:cache
php artisan route:cache
php artisan view:cache
# Mode production
APP_ENV=production
APP_DEBUG=false
Dépannage
| Symptôme | Cause possible | Correctif |
|---|---|---|
| Erreur 500 | Problème de permissions, cache | Vérifier permissions storage/ ; php artisan cache:clear |
| Routes non trouvées | Cache de routes obsolète | php artisan route:clear ; php artisan route:cache |
| Erreurs de migration | Base de données non synchronisée | php artisan migrate:fresh (⚠️ supprime les données) |
| Performances lentes | N+1 queries, pas de cache | Utiliser with() ; activer le cache ; laravel-boost |
Bonnes pratiques
- Fat models, skinny controllers : logique métier dans les modèles
- FormRequest pour la validation
- Services pour la logique complexe
- Scopes pour réutiliser les requêtes
- Tests : couvrir les fonctionnalités critiques
Voir laravel-best-practices pour un guide complet.
Ressources
- laravel-best-practices - Bonnes pratiques complètes
- laravel-security-checklist - Checklist sécurité
- laravel-plesk-website - Déploiement sur Plesk
- cicd-laravel-github-actions - CI/CD avec GitHub Actions
- Documentation Laravel officielle
Cet article s'inscrit dans notre série de guides développement web. Pour une application sur-mesure, contact.