La création d’un projet Laravel efficace nécessite une approche bien structurée pour organiser les données et gérer les fonctionnalités. Voici un guide détaillé pour réussir votre projet Laravel :
1. Modèles : Représentation des Données
Les modèles définissent les entités du système (exemple : utilisateurs, produits, commandes) et leurs relations.
Étapes :
Créer un modèle : Utilisez la commande Artisan pour générer un modèle avec une migration associée :
php artisan make:model Product -m
L’option -m génère également une migration.
Définir les attributs du modèle : Exemple pour le modèle Product :
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
protected $fillable = ['name', 'description', 'price', 'stock'];
}
Ajouter les relations : Exemple : Un produit appartient à une catégorie.
public function category()
{
return $this->belongsTo(Category::class);
}
2. Migrations : Structuration de la Base de Données
Les migrations définissent les tables et leurs colonnes dans la base de données.
Étapes :
Modifier la migration générée : Exemple de migration pour les produits :
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('description');
$table->decimal('price', 8, 2);
$table->integer('stock');
$table->timestamps();
});
}
Exécuter les migrations : Créez les tables dans la base de données avec la commande :
php artisan migrate
3. Contrôleurs : Logique Métier
Les contrôleurs gèrent les requêtes HTTP et relient les modèles aux vues.
Étapes :
Créer un contrôleur : Utilisez Artisan pour générer un contrôleur de ressource :
php artisan make:controller ProductController –resource
Ajouter des méthodes au contrôleur : Exemple d’implémentation dans ProductController :
namespace App\Http\Controllers;
use App\Models\Product;
use Illuminate\Http\Request;
class ProductController extends Controller
{
public function index()
{
$products = Product::all();
return view('products.index', compact('products'));
}
public function create()
{
return view('products.create');
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required',
'price' => 'required|numeric',
'stock' => 'required|integer',
]);
Product::create($validated);
return redirect()->route('products.index')
->with('success', 'Produit ajouté avec succès !');
}
}
Définir les routes : Ajoutez les routes dans routes/web.php :
use App\Http\Controllers\ProductController;
Route::resource('products', ProductController::class);
4. Vues : Interfaces Utilisateur
Les vues affichent les données pour les utilisateurs.
Étapes :
Créer une vue pour lister les produits : Fichier : resources/views/products/index.blade.php :
@extends('layouts.app')
@section('content')
<div class="container">
<h1>Liste des Produits</h1>
@if($products->isEmpty())
<p>Aucun produit disponible.</p>
@else
<ul>
@foreach($products as $product)
<li>{{ $product->name }} - {{ $product->price }} €</li>
@endforeach
</ul>
@endif
</div>
@endsection
Créer une vue pour ajouter un produit : Fichier : resources/views/products/create.blade.php :
@extends('layouts.app')
@section('content')
<div class="container">
<h1>Ajouter un Produit</h1>
<form action="{{ route('products.store') }}" method="POST">
@csrf
<div>
<label for="name">Nom</label>
<input type="text" name="name" id="name" required>
</div>
<div>
<label for="price">Prix</label>
<input type="text" name="price" id="price" required>
</div>
<div>
<label for="stock">Stock</label>
<input type="number" name="stock" id="stock" required>
</div>
<button type="submit">Ajouter</button>
</form>
</div>
@endsection
5. Seeders : Peuplement de la Base de Données
Les seeders permettent de pré-remplir la base de données avec des données initiales.
Étapes :
Créer un seeder :
php artisan make:seeder ProductSeeder
Remplir le seeder : Exemple dans database/seeders/ProductSeeder.php :
namespace Database\Seeders;
use App\Models\Product;
use Illuminate\Database\Seeder;
class ProductSeeder extends Seeder
{
public function run()
{
Product::create([
'name' => 'Produit 1',
'description' => 'Description du produit 1',
'price' => 10.99,
'stock' => 100,
]);
Product::create([
'name' => 'Produit 2',
'description' => 'Description du produit 2',
'price' => 15.99,
'stock' => 50,
]);
}
}
Exécuter le seeder :
php artisan db:seed --class=ProductSeeder
6. Factories : Génération de Données de Test
Les factories permettent de créer des données aléatoires pour les tests.
Étapes :
Créer une factory :
php artisan make:factory ProductFactory --model=Product
Configurer la factory : Exemple dans database/factories/ProductFactory.php :
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
class ProductFactory extends Factory
{
public function definition()
{
return [
'name' => $this->faker->word(),
'description' => $this->faker->sentence(),
'price' => $this->faker->randomFloat(2, 5, 100),
'stock' => $this->faker->numberBetween(1, 500),
];
}
}
Utiliser la factory dans un seeder :
Product::factory(50)->create(); // Génère 50 produits
Exécuter le seeder :
php artisan db:seed --class=ProductSeeder
Résumé
- Modèles : Définissent les entités et leurs relations.
Migrations : Structurent la base de données.
Contrôleurs : Gèrent la logique métier.
Vues : Affichent les données aux utilisateurs.
Seeders : Peuplent la base de données avec des données initiales.
Factories : Génèrent des données de test en masse.
.